Peut PowerShell intercepter les erreurs dans GetChildItem et continuer la boucle?
J'ai un script PowerShell qui est recursing vers le bas à travers le système de fichiers à l'aide de GetChildItem dans une boucle for. Comme il se déplace, c'est la fixation de l'ACL de questions qu'il trouve (surtout lorsque quelqu'un a bloqué le compte BUILTIN\Administrateurs)... mais il y a certains il ne peut pas gérer tout seul, comme quand j'ai [Système.UnauthorizedAccessException] si il y a un explicite "Refuser" ACE.
La ligne de code ressemble à ceci:
foreach($file in Get-ChildItem $dirRoot -Recurse -ErrorAction Continue) {
...
}
Quand il bute sur un chemin qu'il ne peut pas lire, il donne à cette exception:
Get-ChildItem : le chemin d'Accès "C:\TEMP\denied" est refusé. Au
Fix-Acl.ps1:52 char:31
+ foreach($fichier à Get-ChildItem <<<< $dirRoot -Recurse -ErrorAction
Continuer) {
+ CategoryInfo : PermissionDenied:
(C:\TEMP\denied:String) [Get-ChildItem], Non Autorisée AccessException
+ FullyQualifiedErrorId :
DirUnauthorizedAccessError,Microsoft.PowerShell.Commandes.GetChildItemCommand
Je voudrais try/catch ou interruption de l'erreur afin que je puisse réparer les ACL (qui est, de supprimer le "Refuser") en place, et-plus important-continuer la boucle sans perdre ma place. Des suggestions pour moi?
OriginalL'auteur ewall | 2011-08-04
Vous devez vous connecter pour publier un commentaire.
avez-vous utilisé silentlycontinue?
trap
ettry/catch
fonctionnent en général sur "Arrêt" des erreurs, la meilleure option que j'ai trouvé pour l'instant est d'utiliser le-ErrorAction SilentlyContinue
comme vous l'avez suggéré, et puis dans la première ligne du bloc de code et vérifier si on a juste une erreur avecif ($error) {...
.OriginalL'auteur Matt
Comment se Renseigner?
Peut-être ouvrir un second PS fenêtre pour corriger l'erreur, puis continuer la commande dans le premier PS fenêtre en sélectionnant Y pour continuer.
Vous pouvez également utiliser ErrorVariable
Get-Variable a ou $a va vous montrer toutes les erreurs engagées par la commande. Vous pouvez également utiliser +variablename (+) pour ajouter des erreurs d'une variable existante.
Pour tout le monde: Ne faites pas la même erreur que j'ai faite quand j'ai essayé ce.. N'ajoutez pas de $ pour la variable sur l'-ErrorVariable ligne. Une chose simple à négliger et j'aurais pensé que cela n'a pas fonctionné jusqu'à ce que je pris cette faute de frappe.
OriginalL'auteur Jesse