嘗試聯系一臺服務器(按名稱)并從我需要洗掉的用戶串列中搜索每個用戶名的存在的組態檔 DIR。經過多次嘗試,仍然看到“$User profile not found”的結果。即使我可以看到它清楚地在 DIR 中。當我為一位用戶運行一項特定測驗時,它會顯示出來.. 示例:`
$DelUser = "user.name"
$ProfileUser = "\\dc1\P$\Profiles\$DelUser" ".V6"
if ([System.IO.Directory]::Exists($ProfileUser)) {
"......$DelUser..... EXISTS!"
else {
"$DelUser Path NOT FOUND!"
}
}
從源 (txt) 檔案中提取(我也嘗試過使用import-csv具有相同結果的 csv 檔案)我嘗試瀏覽串列并使用以下代碼搜索每個用戶檔案夾的存在。用戶檔案夾的user.name.V6格式。下面是一個帶有一些注釋替代嘗試的示例。
$DelUser = Get-Content -Path C:\DelFolder\Delete-DC1-Users.txt
$UserPath = "\\DC1\P$\Profiles\$User" ".V6"
foreach ($User in $DelUser) {
if ([System.IO.Directory]::Exists($UserPath)) {
Write-Host "$UserPath EXISTS"
#if (Test-Path -Path $UserPath) {
# if ($UserPath) {
# Write-Host "$User Folder Exists"
}
else {
Write-Host "$User Folder DOES NOT EXIST"
}
}
充其量我會看到$User Folder DOES NOT EXIST即使它確實存在于服務器上。
我也嘗試過使用Test-Path無濟于事,如上面注釋掉的行中所示。
謝謝!PS我在這里發布的第一個問題,所以對于任何不幸或錯誤,我深表歉意!
uj5u.com熱心網友回復:
$UserPath = "\\dc1\P$\Profiles\$User" ".V6"
您使用"...",即可擴展(插值)字串,意味著對變數的參考$User會立即擴展,從而將靜態字串存盤在變數中$UserPath;也就是說,您正在“烘焙”當時的值$DelUser (并且由于$User直到稍后才定義,因此默認情況下擴展將導致空字串)。
相反,您需要的是在回圈中移動您的$UserPath = ...分配,以便在每次迭代中根據當時的當前值重新評估is 字串foreach"..."$User:
$delUser = Get-Content -LiteralPath C:\DelFolder\Delete-DC1-Users.txt
foreach ($user in $delUser) {
# Determine the path *for the $user at hand*.
$userPath = "\\DC1\P$\Profiles\$user.V6"
if (Test-Path -LiteralPath $userPath) {
"$userPath EXISTS"
}
else {
"$user Folder DOES NOT EXIST"
}
}
筆記:
".V6"后綴直接折疊到字串中"..."- 無需單獨附加.- 請注意,這樣的后綴不會被視為訪問變數屬性的嘗試
$user- 對于后者,您需要在其中包含附件$(...)- 請參閱此答案以獲取 PowerShell 字串插值規則的摘要。
- 請注意,這樣的后綴不會被視為訪問變數屬性的嘗試
當您知道您正在處理文字(逐字)路徑而不是
-LiteralPath通配符運算式時,使用它更安全。-Path您可以添加
-Type Container到Test-Path呼叫以將測驗限制為具有給定路徑的目錄(而不是檔案)是否存在,盡管這里可能沒有必要。省略了
Write-Host呼叫以支持字串的隱式Write-Output輸出(隱式),但請注意前者直接列印到display,[1]而后者產生可以捕獲的資料輸出。- 有關更多資訊,請參閱此答案。
雖然沒有強制執行,但值得遵守的約定是以小寫字母開頭的常規變數的名稱(例如,
$user),并且僅以大寫字母開頭的引數變數(例如$Path在param(...)塊內)。
請注意,有多種方法可以執行字串模板化,其中字串擴展(插值)是根據技術上逐字字串的需要執行的,如本答案所示。
但是,在手頭的情況下,上述解決方案更簡單。
[1] 在 PSv5 Write-Host中寫入資訊流,可以捕獲其輸出,但只能通過6>.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532925.html
標籤:电源外壳前锋目录存在
上一篇:Powershell:使用從標簽之間提取的值創建表,沒有任何空格(由;分隔)
下一篇:Powershell初學者腳本
