2014-01-05 70 views
0

我們正在刪除一些XP配置文件以節省磁盤空間。一些用於XP的配置文件文件夾以及那些用於Windows 7的.V2用戶的配置文件文件夾也存在。Id喜歡使用powershell來僅返回那些存在的XP配置文件。Powershell僅返回存在的文件夾

這裏是我到目前爲止的代碼

$path = "\\server01\profiles" 

#Get User Folder names into variable for ForEach Loop 
$UserFolders = get-childitem -path $path\*.V2 | where-object {$_.Psiscontainer -eq "True"} |select-object name 

#Loop through folders in Directory 
foreach ($UserFolder in $UserFolders){ 
    #remove the last .V2 from the folder name 
    $UserFolder = $UserFolder.name.substring(0,$UserFolder.name.length-3) 
    write-output $path\$userfolder 
      test-path $path\$userfolder #returns True or false 
    } 

我只是無法得到的最後一位的工作。我怎樣才能只顯示那些存在的文件夾(返回True)

回答

1

你只需要重新排列東西,這樣Write-Output只有在Test-Path驗證路徑存在時纔會發生。我不會添加任何新的代碼,除了if語句,作爲一個例子:通過將write-output到的if語句的scope

foreach ($UserFolder in $UserFolders){ 
    $UserFolder = $UserFolder.name.substring(0,$UserFolder.name.length-3) 

    if (test-path $path\$userfolder) 
    { 
     # Code at this level will only be executed if Test-Path was true. 
     write-output $path\$userfolder 
    } 

} 

因此,我們保證,如果Test-Path是它只會被執行真正。

+1

作爲一個側面說明:除非你確定你需要匹配模式,否則總是使用'Test-Path -LiteralPath'。我還推薦使用'(Join-Path $ path $ userfolder)'而不是'$ path \ $ userfolder'。 –

相關問題