2013-10-23 1 views
3

-ErrorAction SilentlyContiune을 사용하지만 종료되지 않는 오류를 처리하고 싶습니다. 끝내지 않는 오류를 잡으려면 -ErrorAction Stop을 사용해야한다는 것을 알고 있습니다. 그 방법의 문제는 try 코드 블록에서 내 코드가 실제로 멈추기를 원하지 않는다는 것입니다. 나는 contiune하기를 원하지만 non-terminating 에러를 처리한다. 나는 또한 침묵하고 싶다. 이것이 가능한가? 어쩌면 나는 잘못된 방향으로 갈 것입니다.Powershell은 종료 오류를 SilentlyContinue와 함께 catch합니다.

Get-Childitem의 키워드 폴더에 대한 액세스 거부 오류가 처리하려는 비 종료 오류의 예입니다. 다음은 샘플입니다.

$getPST = Get-ChildItem C:\ -Recurse -File -Filter "*.PST" 
$pstSize = @() 
Foreach ($pst in $getPST) 
{ 
    If((Get-Acl $pst.FullName).Owner -like "*$ENV:USERNAME") 
    { 
     $pstSum = $pst | Measure-Object -Property Length -Sum  
     $size = "{0:N2}" -f ($pstSum.Sum/1Kb) 
     $pstSize += $size 
    } 
} 
$totalSize = "{0:N2}" -f (($pstSize | Measure-Object -Sum).Sum/1Kb) 

답변

3

당신은 ErrorAction이 SilentlyContinue로 try/catch를 사용할 수 없습니다. 자동으로 오류를 처리하려면 ErrorAction에 Stop을 사용하고 Catch 블록에서 Continue 키워드를 사용하면 다음 입력 개체와 함께 루프가 계속됩니다.

$getPST = Get-ChildItem C:\ -Recurse -File -Filter "*.PST" 
$pstSize = @() 
Foreach ($pst in $getPST) 
{ 
Try { 
     If((Get-Acl $pst.FullName -ErrorAction Stop).Owner -like "*$ENV:USERNAME") 
     { 
     $pstSum = $pst | Measure-Object -Property Length -Sum  
     $size = "{0:N2}" -f ($pstSum.Sum/1Kb) 
     $pstSize += $size 
     } 
    } 

Catch {Continue} 
} 
$totalSize = "{0:N2}" -f (($pstSize | Measure-Object -Sum).Sum/1Kb) 
+0

답장을 보내 주셔서 감사합니다. 내 Foreach 루프 외부에있는 Get-ChildItems를 처리하려고합니다. 그래서 만약 내가 ErrorAction 중지. 첫 번째 오류에서 멈추고 contiune하지 않습니다. – HiTech

+0

어떤 종류의 오류 처리를 원하십니까? – mjolinor

+0

나는 나의 직책에 내가하려고하는 것을 언급했다. Get-Childitem에서 오는 각 '액세스 거부'오류를 처리하고 싶습니다. 파일 이름에 따라 다르게 처리 할 것입니다. – HiTech

관련 문제