Uma maneira mais fácil e menos confusa de capturar erros específicos do cmdlet em um arquivo é usando o parâmetro -Errorvariable. Ele é construído na maioria dos cmdlets. Não é confiável examinar a variável $ Error, pois ela é uma variável global e tem uma grande chance de ser corada por outros erros não mitigados no processo PowerShell.
O código abaixo registrará os erros em dois arquivos de log.
- gci_errors.csv - Contém erros enumerando as pastas
-
gacl_errors.csv - Contém erros ao enumerar a ACL em um arquivo / pasta específico.
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 | Export-Csv -NoTypeInformation -Path C:\Temp\gci_errors.csv $gacl_errors | Select-Object -ExpandProperty CategoryInfo | Export-Csv -NoTypeInformation -Path C:\Temp\gacl_errors.csv
Alterei a saída para um arquivo CSV conforme sua exigência. Faz mais sentido, pois é mais fácil analisar e importar para executar comandos nos dados. O CSV tem um cabeçalho chamado Target , que reflete o caminho da pasta que está causando problemas. Você pode escrever um cmdlet, ou seja, Fix-DirPerms e canalizar para ele. Algo como:
Import-CSV -Path c:\Temp\gci_errors.csv | Fix-DirPerms