Powershell piège [Exception] n'est pas attraper mon erreur
Pour une raison quelconque, mon script n'est pas la capture de l'exception, quand je lance le script suivant à l'encontre d'un fichier qui n'existe pas. J'ai basé ce code à partir des exemples que j'ai trouvé sur le web, mais il ne semble pas fonctionner pour moi.
J'aimerais avoir des conseils ou des conseils sur la façon de résoudre ce problème.
Remarque: dans l'exemple ci-dessous j'ai aussi essayé
trap [Exception] {
mais cela ne fonctionne pas non plus.
Voici le script:
function CheckFile($f) {
trap {
write-host "file not found, skipping".
continue
}
$modtime = (Get-ItemProperty $f).LastWriteTime
write-host "if file not found then shouldn't see this"
}
write-host "checking a file that does not exist"
CheckFile("C:\NotAFile")
write-host "done."
de sortie:
PS > .\testexception.ps1
checking a file that does not exist
Get-ItemProperty : Cannot find path 'C:\NotAFile' because it does not exist.
At C:\Users\dleclair\Documents\Visual Studio 2010\lib\testexception.ps1:12 char:35
+ $modtime = (Get-ItemProperty <<<< $f).LastWriteTime
+ CategoryInfo : ObjectNotFound: (C:\NotAFile:String) [Get-ItemProperty], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand
if file not found then shouldn't see this
done.
PS >
OriginalL'auteur Denis | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
Essayer comme ceci:
Sur la base des observations de l'OP:
Je pense que vous avez mal compris ce qui est dit dans l'article que vous avez lié à:
Donc, si vous faites quelque chose comme cela:
after
sera imprimé.Mais si vous faites quelque chose comme cela:
after
ne sera PAS imprimé, maisoutside after
sera.Vous pouvez également utiliser un bloc try-catch:
-erroraction stop
si vous voulez voir "fichier non trouvé, en ignorant"Merci! Signifie pas arrêter. A été d'essayer quelque chose d'autre de continuer et collé.
J'ai modifié mon script à l'air comme il suit:
J'ai modifié mon script à l'air comme il suit: la fonction CheckFile($f) { piège { write-host "fichier non trouvé, en ignorant" continuer } $fprop = Get-ItemProperty $f -erroraction arrêter $modtime = $fprop.LastWriteTime write-host "si le fichier n'est pas trouvé, alors ne devriez pas voir de cette, modtime = $modtime" } write-host "vérification d'un fichier qui n'existe pas" CheckFile("C:\NotAFile") write-host "fait".
C'est a arrêté l'exception de l'objet de dumping à l'écran. Cependant, je suis toujours de voir la ligne qui dit " write-host "si le fichier n'est pas trouvé, alors ne devrait pas voir cette" obtenir de l'imprimé. C'était ma compréhension de la lecture de la poste à l'adresse huddledmasses.org/trap-exception-in-powershell que le piégeage d'une exception devrait provoquer l'exécution de seulement commencer à l'extérieur de la portée où le piège a été pris. Donc dans ce cas je me serais attendu à l'write-host appeler à l'intérieur de la fonction pour obtenir sauté et les choses devraient recommencer à partir de l'extérieur de la fonction.
OriginalL'auteur manojlds
Vous devez définir
$ErrorActionPreference
àSilentlyContinue
à l'intérieur de la fonction ou à l'extérieur du script (pour application à l'échelle mondiale) pourtrap
de travail. Sinon (comme mentionné ci-dessus), jeu de-ErrorAction
paramètre commun à la même chose.OriginalL'auteur Carlos Nunez