Действительно ли возможно перечислить все полномочия, где у меня нет доступа

Короткий ответ - да. Но это зависит, какой формат дб Вы имеете. Если у Вас есть простой текстовый файл с SQL-операторами, можно использовать инструменты Unix как awk, grep, разность, и т.д. Или можно использовать жемчуг, он должен упростить проблему. Зависит Вашего типа БД, типа резервирования и размера.

5
задан 14 May 2013 в 02:35
2 ответа

Более простой и менее запутанный способ перехватывать специфичные для командлета ошибки в файл - использовать -Errorvariable параметр. Он встроен в большинство командлетов. Ненадежно смотреть на переменную $ Error, поскольку это глобальная переменная, и у нее высока вероятность появления других явных ошибок в процессе PowerShell.

Приведенный ниже код регистрирует ошибки в 2 файлах журнала.

  1. gci_errors. csv - содержит ошибки при перечислении папок
  2. gacl_errors.csv - содержит ошибки при перечислении ACL для определенного файла / папки.

     Get-ChildItem C: \ Temp -Recurse -ErrorAction SilentlyContinue -ErrorVariable gci_errors | ForEach-Object {
    
    $ _ | Get-Acl -ErrorAction SilentlyContinue -ErrorVariable gacl_errors
    }
    
    $ gci_errors | Select-Object -ExpandProperty CategoryInfo | Экспорт-CSV -NoTypeInformation -Path C: \ Temp \ gci_errors.csv
    $ gacl_errors | Select-Object -ExpandProperty CategoryInfo | Экспорт-CSV -NoTypeInformation -Path C: \ Temp \ gacl_errors.csv
    

Я изменил вывод в файл CSV в соответствии с вашими требованиями. Это имеет больше смысла, поскольку его легче анализировать и импортировать для выполнения команд с данными. CSV имеет заголовок столбца под названием Target , который отражает путь к папке, вызывающей проблемы. Вы можете написать командлет, например Fix-DirPerms , и передать его по конвейеру. Что-то вроде:

    Import-CSV -Path c:\Temp\gci_errors.csv | Fix-DirPerms
2
ответ дан 3 December 2019 в 01:51

Есть много разных способов сделать это. Вот кое-что, что я только что придумал.

$Error.Clear()      # This is a global variable!
$Errors = @()
$Items = Get-ChildItem C:\ -Recurse -ErrorAction SilentlyContinue
ForEach($Err In $Error)
{
    $Errors += $Err.Exception
}
ForEach($Item In $Items)
{
    Try
    {
        $Item | Get-ACL -ErrorAction SilentlyContinue | Out-Null
    }
    Catch
    {
        $Errors += "$($_.Exception.Message) $($Item.FullName)"
    }
}    
Write-Host $Errors.Count "errors encountered."
$Errors | Out-File errors.txt

Итак, теперь у вас есть аккуратный список всех ошибок, которые были обнаружены либо в процессе Get-ChildItem, либо в процессе Get-ACL, что важно, поскольку во время каждая операция. Вы можете передать переменную $ Errors в CSV или что угодно. Это, вероятно, займет много времени на сетевом ресурсе 3 ТБ. Попробуйте добавить индикатор выполнения.

1
ответ дан 3 December 2019 в 01:51

Теги

Похожие вопросы