2016-08-25 33 views
0

此腳本旨在緩衝通過一系列目錄,當DirUnauthorizedAccessError,MicrosoftPowerShell.Commands.GetChildItemCommand類型的錯誤被拋出時,它應該調用另一個函數Take-Ownership,該函數接受目錄的所有權併爲localAdmin和域管理員添加完整權限到文件夾。 (這是真正用於緩解了老用戶配置文件刪除腳本):當我以域管理員身份運行此功能時,爲什麼不會引發錯誤?

function Test-Folder($FolderToTest, $localAdminName) { 
    # Remeber the old error preference... 
    $old_ErrorActionPreference = $ErrorActionPreference 
    $ErrorActionPreference = 'SilentlyContinue' 

    $error.Clear() 

    # Go through the directories...and capture errors in $error 
    Get-ChildItem $FolderToTest -Recurse -ErrorAction SilentlyContinue -ErrorVariable errz | Select FullName 

    Write-Host $errz.count 

    if ($errz.Count -eq 0) { 
     Write-Host "blah no errors" 
     foreach ($err in $errz) { 
      Write-Host "Error: $err" 
      if ($err.FullyQualifiedErrorId -eq "DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand") { 
       Write-Host Unable to access $err.TargetObject -Fore Red 
       Write-Host Attempting to take ownership of $err.TargetObject -Fore Yellow 
       Take-Ownership -Folder $err.TargetObject, -LocalAdminName $localAdminName 
       Test-Folder -FolderToTest $err.TargetObject -localAdminName $localAdminName 
      } 
     } 
    } 

    $ErrorActionPreference = $old_ErrorActionPreference 
} 

不幸的是,當我運行它以域管理員它不拋出任何錯誤。我找到了ErrorActionPreferences的一個列表here,但這些錯誤似乎被忽略,並且它輸出blah no errors我該怎麼做才能確保我收到錯誤,並且我的Take-Ownership函數實際上被調用了?

+0

如果我不太可能在這裏得到答案,請將其傳輸到serverfault stackexchange。 – leeand00

回答

1

你的代碼只進入if塊,如果$errz.Count是0。0中有$errz沒有元素的數量,所以沒有什麼的foreach循環做。

添加一個else分支到條件,移動foreach循環,代碼應該做你想做的。

if ($errz.Count -eq 0) { 
    Write-Host "blah no errors" 
} else { 
    foreach ($err in $errz) { 
     Write-Host "Error: $err" 
     ... 
    } 
}
+0

好吧,這是真的......但是當它遇到'Write-Host Errz.Count'時,我得到一個零錯誤計數,這更是我的混亂之源。如果我無法進入管理員帳戶的目錄,它應該拋出異常嗎? – leeand00

+0

是的。當我測試它時,它就完成了。您確定管理員無法訪問'$ FolderToTest'下的子文件夾嗎?當您將錯誤操作更改爲「繼續」時,您會得到錯誤輸出嗎? –

+0

我會讓你知道... – leeand00

相關問題