2014-01-05 2 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

Test-Path이 경로가 존재하는지 확인하는 경우 Write-Output이 발생하기 만하면됩니다. 내가 예를 들어, if 문을 제외하고 코드에 새로운 것을 추가하지 않습니다 : 그래서

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 
    } 

} 

을 문 경우의 scopewrite-output를 배치하여, 우리는 Test-Path 인 경우에만 실행 될 수 있도록 참된.

+1

메모 : 패턴 일치가 필요한 경우가 아니라면 항상 'Test-Path -LiteralPath'를 사용하십시오. 또한'$ path \ $ userfolder'보다는'(Join-Path $ path $ userfolder)'를 사용하는 것을 권장합니다. –

관련 문제