2016-08-25 4 views
0

Этот сценарий предназначен для повторной обработки через ряд каталогов, и когда выбрана ошибка типа DirUnauthorizedAccessError,Microsoft или PowerShell.Commands.GetChildItemCommand, она должна вызвать другую функцию Take-Ownership, которая переходит в собственность каталога и добавляет полные разрешения для локального администратора и администратора домена в папку , (Это на самом деле скрипт, используемый для облегчения удаления старых профилей пользователей):Почему не возникает ошибка при запуске этой функции в качестве администратора домена?

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

Если я не могу получить здесь ответ, переведите его в файл 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', к которым администратор не может получить доступ? Вы получаете сообщение об ошибке при изменении действия ошибки на 'Continue'? –

+0

Я позволю тебе знать ... – leeand00

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

  • Нет связанных вопросов^_^