Est-il possible d'énumérer toutes les autorisations auxquelles je n'ai pas accès

Je cherche un moyen de voir récursivement la ressource de fichier entière (Assez grand 3 Fichiers TB) et répertorier tous les fichiers / Dossiers à qui je n'ai pas accès. En raison de la migration et des erreurs de grande façon (Suite 255 Symboles) Nous avons trouvé que certains dossiers / Les fichiers ont perdu toutes les autorisations et nous avons besoin d'un moyen de tous les trouver. Actuellement, en tant qu'administrateur de domaine, je ne peux pas spécifier des autorisations ou du propriétaire. Je peux le prendre sous votre contrôle et réinitialiser les autorisations, mais j'ai tellement de fichiers / Dossiers que je voudrais apporter dans des fichiers CSV ou quelque chose comme ça.

J'ai essayé ce qui suit:

get-childitem "\,\fileshare\f$\folder\etc" -recurse | get-acl

Il semble que cela fonctionne bien, cela me donne des listes ACL Pour tous les fichiers / Les dossiers existants et ont des autorisations appropriées sur eux. Mais dès qu'il pénètre dans le dossier sur lequel je n'ai pas accès, je reçois l'erreur suivante:

Get-Acl : Attempted to perform an unauthorized operation.
At line:1 char:133
+ get-childitem "\,\fileshare\f$\folder\etc" -re
curse | get-acl <<<<
+ CategoryInfo : NotSpecified: (:) [Get-Acl], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetAclCommand

Ce sont les erreurs que je voudrais écrire dans le fichier CSV / TXT Et ignorer toutes les autres autorisations. Il serait parfait s'il pouvait être affiché dans plusieurs lignes pour chaque erreur.

Je me demandais simplement si quelqu'un a une idée ou un allusion, comment devrais-je agir?

(Veuillez noter que dans les pistes ci-dessus, il y a des virgules, de sorte qu'ils ne sont pas transformés en voie réelle

\,\fileshare\f$\folder\etc)

Remercier!
Invité:

Dominique

Confirmation de:

Une méthode plus simple et moins déroutante pour intercepter des erreurs de cmdlet à déposer - Utilisation du paramètre -Errorvariable. Il est intégré dans la plupart des cmdlets. Peu fiable pour regarder la variable $ Error, Comme il s'agit d'une variable globale, elle a une forte vraisemblance d'autres erreurs explicites dans le processus. PowerShell.

Le code ci-dessous enregistre des erreurs dans 2 Fichiers journaux.

gci_errors.csv - Contient des erreurs lors de la liste des dossiers répertoriés

gacl_errors.csv - Contient des erreurs lors de la liste ACL Pour un fichier spécifique / Dossiers.

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

J'ai changé la sortie du fichier CSV Conformément à vos besoins. Cela a plus de signification, car il est plus facile d'analyser et d'importer pour exécuter des commandes avec des données. DANS CSV Il y a un titre de colonne appelé

but

Qui reflète le chemin du dossier causant le problème. Vous pouvez écrire une cmdlet, c'est-à-dire

Fix-DirPerms

Et le téléphone à elle. Sorte de:

    Import-CSV -Path c:\Temp\gci_errors.csv | Fix-DirPerms

Christine

Confirmation de:

Il existe de nombreuses façons différentes de le faire. C'est quelque chose que je viens de cuisiner.

$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

Ainsi, vous avez maintenant une liste nette de toutes les erreurs qui ont été trouvées dans le processus. Get-ChildItem, soit dans le processus Get-ACL, Ce qui est important car pendant chaque opération, il peut y avoir des erreurs distinctes. Vous pouvez passer la variable $ Errors dans CSV Ou n'importe quoi. Il est susceptible de prendre beaucoup de temps sur la ressource réseau. 3 Tb. Envisagez d'ajouter un indicateur de progrès.

Pour répondre aux questions, connectez-vous ou registre