2014-01-05 2 views
0

Мы удаляем загрузку профилей XP для экономии места на диске. Некоторые папки профиля для XP существуют, а также те, что для одного и того же пользователя с .V2 для Windows 7. 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 
    } 

Я просто не могу получить последний бит для работы. Как я могу отображать только те папки, которые существуют (return True)

ответ

1

Вам просто нужно изменить порядок вещей, чтобы Write-Output возникал только в том случае, если Test-Path проверяет, существует ли путь. Я не добавит ничего нового кода для если заявления, за исключением, как, например:

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 
    } 

} 

Итак, размещая write-output в scope КРП заявления, мы гарантируем, что он будет выполняться, только если Test-Path является правда.

+1

В качестве примечания: всегда используйте «Test-Path -LiteralPath», если вы не уверены, что вам нужно сопоставить шаблоны. Я также рекомендую использовать '(Join-Path $ path $ userfolder)', а не '$ path \ $ userfolder'. –

Смежные вопросы