attraper le code retour d'une commande avec "invoke-command" - Powershell 2
Je suis à l'aide de "invoke-command" pour exécuter un script sur une machine distante.
invoke-command -computername <server_name> -scriptblock {command to execute the script}
Mon script renvoie "-1" quand il y a des erreurs.
Donc, je voulais m'assurer que le script est exécuté avec succès par vérifier le code de retour.
J'ai essayé comme suit.
$code = invoke-command -computername ....
Mais elle ne retourne rien.
N'est pas Invoke-command
attraper code de retour de bloc de script?
Est-il d'autre moyen de résoudre ce problème?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Je pense que si vous exécutez une commande de cette manière sur un autre serveur il n'y a aucun moyen que vous pouvez obtenir le code de retour de votre script. C'est parce que
Invoke-Command
simplement s'exécute une commande sur la machine distante, probablement au sein d'une seule session temporaire, et vous ne pouvez pas vous connecter à la session de nouveau.Ce que vous peut faire, cependant, est de créer une session sur l'ordinateur distant et d'appeler votre script à l'intérieur de cette session. Ensuite, vous pouvez seulement de vérifier la valeur de retour de cette session à nouveau. Si quelque chose le long des lignes de:
pourrait fonctionner. De cette façon, vous obtenez l'accès à un même état et des variables comme la première
Invoke-Command
sur la machine distante.Aussi
Invoke-Command
est très peu probable de passer par la commande à distance de la valeur de retour. Comment voulez-vous comprendre alors queInvoke-Command
lui-même a échoué?ETA: Ok, j'ai mal lu vous à l'égard de "code de retour". J'ai été en supposant que vous avez voulu dire
$?
. De toute façon, d'après la documentation, vous pouvez exécuter un script sur un ordinateur distant comme suit:Voici un exemple...
Script à distance:
Script Local:
$donc, -UseSSL et $mycreds ne sont pas nécessaires si vous êtes entièrement à l'intérieur d'un groupe de confiance.
Cela semble fonctionner pour moi... bonne chance!
Si une télécommande scriptblock renvoie un code de sortie, le psession sera fermé. Je suis juste à la vérification de l'état de la psession. S'il est fermé je suppose une erreur. Type de hacky, mais il travaille pour mes fins.
J'étais à la recherche d'attraper le code d'erreur de retour par un script batch appelé par invoke-command. Pas une tâche facile, mais j'ai trouvé un joli et facile à faire.
Vous script PowerShell est
$res=invoke-command -Computername %computer% {C:\TEST\BATCH.CMD}
write-host $res
Vous trouverez les $res est la sortie du lot, sachant cela, en utilisant @echo off, >nul echo "ce que vous voulez revenir à", c'est possible!
Vous script batch
Maintenant $res sera = 2! Ensuite, vous pouvez appliquer la logique de votre lot.
Vous pouvez même utiliser la commande invoke-command -AsJob
L'utilisation de Recevoir des-emploi pour obtenir la sortie! Dans ce cas, vous n'avez pas besoin d'utiliser $res.
Cheers,
Julien
Si vous avez besoin de la sortie du bloc de script et le code de sortie, vous pouvez jeter le code de sortie du bloc et de les convertir si de retour dans un entier dans la partie appelante.
Renvoie le standard et le dernier code de sortie. Cela nécessite toutefois que, dans votre bloc de script, toutes les exceptions sont capturés et re-jeté comme les codes de sortie. Sortie à partir de l'exemple ...
La dernière Powershell Invoke-Command ci-dessous renvoie la valeur booléenne True si le code d'erreur est égale à zéro à partir du script exécuté et boolean False si le code de retour est non nulle. Fonctionne très bien pour la détection des codes d'erreur renvoyés de distance exécutions.