2017-10-09 17 views
1

je le script suivant:de script PowerShell - vérifier le code de sortie

foreach ($server in $ProductList.$SelectedServer) { 
    Invoke-Command -ComputerName $server -Credential domain\user -ScriptBlock { 
     Import-Module WebAdministration 
     echo "restarting AppPool $args[0] ... on $args[1]" 
     Restart-WebAppPool -Name $args[0] -ErrorAction Stop 
     echo "Restarted WebApp $args[0] on $args[1]" 
    } 
} -ArgumentList $SelectedAppPool, $Server 

Je voudrais vérifier si la commande Restart-WebAppPool exécute avec succès. Si c'est le cas je fais écho 'ça a marché' sinon ça fait écho 'Ça n'a pas marché'.

Le but est de fournir un simple message en anglais plutôt qu'une exception non gérée typique.

+0

Le code affiché ne peut éventuellement travailler. Les boucles 'foreach' n'ont pas de paramètre' -ArgumentList'. –

+0

@AnsgarWiechers ouais a dû déplacer cela jusqu'à la partie Invoke-Command. Merci pour cela – joebegborg07

Répondre

2

En théorie, vous êtes la plupart du temps là-bas, je ne sais pas du haut de la tête dans quelles circonstances Restart-WebAppPool jette une erreur de terminaison, mais pour faire quoi que ce soit avec eux, vous aurez besoin d'essayer/blocs catch:

try { 
    Restart-WebAppPool -Name $args[0] -ErrorAction stop 
    Write-Host "It worked" 
} catch { 
    Write-Host "It did not work" 
    # Error handling goes here. 
} 

La « Ça a marché » sortie ne seront affichés que si aucune erreur de terminaison sont jetés par Restart-WebAppPool

+2

Ajout à cela, @Joe, vous pouvez envoyer un objet PSCredential au lieu d'un nom d'utilisateur en tant que paramètres pour -Credential. Sinon, à l'intérieur d'une boucle for, vous devrez entrer le mot de passe autant de fois qu'il itère. –

+1

Merci @Windos. Cela a fait l'affaire. Juste pour clarifier. Est-ce que try/catch exécute réellement le bloc de code dans la section try? Ou est-ce simplement essayer/course sèche? – joebegborg07

+1

@ joebegborg07 il l'exécute réellement, mais il s'arrêtera dès qu'il se termine par une erreur de terminaison et passera directement au bloc catch (donc vous ne verrez pas "ça a marché" s'il y a une erreur.) – Windos