Comment capturer l'exception soulevée dans le scriptblock de start-emploi?
J'ai le script suivant,
$createZip = {
Param ([String]$source, [String]$zipfile)
Process {
echo "zip: $source`n --> $zipfile"
throw "test"
}
}
try {
Start-Job -ScriptBlock $createZip -ArgumentList "abd", "acd"
echo "**Don't reach here if error**"
LogThezippedFile
}
catch {
echo "Captured: "
$_ | fl * -force
}
Get-Job | Wait-Job
Get-Job | receive-job
Get-Job | Remove-Job
Cependant, l'exception soulevée dans une powershell instance ne peut pas être capturé. Quelle est la meilleure façon de capturer l'exception?
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
343 Job343 Running True localhost ...
**Don't reach here if error**
343 Job343 Failed True localhost ...
zip: abd
--> acd
Receive-Job : test
At line:18 char:22
+ Get-Job | receive-job <<<<
+ CategoryInfo : OperationStopped: (test:String) [Receive-Job], RuntimeException
+ FullyQualifiedErrorId : test
J'ai mis à jour ma réponse pour vous montrer comment dans votre question précédente.
Il n'est pas clair ce que vous essayez d'accomplir avec le travail. Il semble que vous souhaitez à la fois asynchrone et synchrone comportement dans le même temps, ce qui est impossible. Quand voulez-vous exécuter la ligne suivante dans votre script?
Il n'est pas clair ce que vous essayez d'accomplir avec le travail. Il semble que vous souhaitez à la fois asynchrone et synchrone comportement dans le même temps, ce qui est impossible. Quand voulez-vous exécuter la ligne suivante dans votre script?
OriginalL'auteur ca9163d9 | 2012-01-05
Vous devez vous connecter pour publier un commentaire.
À l'aide de
throw
va changer l'objet de la tâche deState
à la propriété "Échec". La clé est d'utiliser l'objet de la tâche retourné à partir deStart-Job
ouGet-Job
et vérifier laState
de la propriété. Vous pouvez ensuite accéder au message de l'exception de l'objet de la tâche elle-même.Par votre demande, j'ai mis à jour l'exemple d'inclure également la simultanéité.
Est sûr. Voir ma réponse mis à jour.
Merci. Cependant, le
Wait-Job
va bloquer l'exécution des instructions du bloc try, qui sera exécuté dans une grande boucle. Mon objectif de l'aide de start-job est de faire en parallèle de la tâche dans la boucle principale et la compression... On dirait que je suis à la recherche de quelques asynchronized de l'exécution...Désolé posté sans vérifier. Il y avait un problème avec elle. Je viens de mettre à jour mise à jour d'une version testée, donner à ceci un essai.
oui l'exemple que j'ai fourni uniquement à des adresses de recevoir le message d'erreur de la tâche en arrière-plan. Si vous voulez asynchrone en boucle soutien que vais coût supplémentaire 😉 (C'est très faisable tout de même).
OriginalL'auteur Andy Arismendi
Cela devrait être un commentaire, mais je n'ai pas la réputation de laisser des commentaires.
Ma réponse est que vous devez utiliser Andy Arismendi de réponse, mais aussi de sortie
$job.ChildJobs[0].Error
Comme
$job.ChildJobs[0].JobStateInfo.Reason.Message
n'est pas toujours utile.$job.ChildJobs[0].JobStateInfo.Reason
. J'ai aussi été en mesure de "renvoyer" l'erreur. ChicldJobs[0].L'erreur était vide.$job.ChildJobs[0].Error
renvoie tous les non-terminaison des erreurs.$job.ChildJobs[0].JobStateInfo.State
renvoie la résiliation d'erreur si l'un (Etat == Échec). sourceOriginalL'auteur waxingsatirical
J'ai été en mesure de "renvoyer" l'exception dans le thread principal en utilisant:
Je vais mon cas d'utilisation comme un exemple. Il peut facilement être appliquée à l'OP.
Travaille dans la v2.0.
Noter que si l'erreur dans le travail est non-résiliation, les lignes suivantes ne pourront continuer à exécuter. Mais, ce ne sera pas évident dans la sortie retourné à partir de la réception de l'Emploi, de Recevoir des-Emploi "met fin à la moitié du chemin thorugh" - il les jette hors de lui-même lorsque l'objet d'erreur est rencontrée.
Un moyen d'éviter cela est d'envelopper l'ensemble du bloc try {} catch{throw;}
Aussi, l'Emploi de l'état ne sera pas "Échoué" si l'exception n'est pas appelé à disparaître
OriginalL'auteur Patrick