2 votes

Accéder à la sélection de l'utilisateur à partir d'un cmdlet précédent

J'écris un script que je veux pouvoir faire réagir en fonction de la réponse de l'utilisateur à une demande de confirmation qui fait partie d'un cmdlet exécuté dans le script. Par exemple :

Stop-Process -Name notepad -Confirm
if ($userresposne -eq "Yes") {echo "R.I.P. Notepad"} else {echo "Notepad lives to fight another day"}

J'ai besoin de savoir ce que je dois utiliser à la place de $userresponse pour appeler l'entrée de l'utilisateur à l'invite de confirmation dans le champ Stop-Process . (Une fois que cela sera connu, je suis sûr que je peux trouver ce qui devrait être utilisé à la place de "Yes" .) Existe-t-il un moyen de faire cela ?

Je travaille en PowerShell 3.0 mais j'ai besoin que le script soit rétrocompatible avec la version 2.0.

La clé ici est que je Ne le fais pas. Je ne veux pas avoir à écrire mon propre mécanisme d'invite dans le script. Je suis conscient qu'il existe des moyens de le faire, et je l'ai fait dans d'autres script. Cependant, puisque Stop-Process est déjà capable de demander à l'utilisateur l'entrée dont j'ai besoin, ajouter ces lignes supplémentaires ici semblerait un peu redondant.

Dans le cadre d'un script de traitement par lots, je chercherais probablement quelque chose comme la fonction %ERRORLEVEL% variable d'environnement. Existe-t-il quelque chose de similaire que je pourrais utiliser ici ?

2voto

Rory McCune Points 571

La cmdlet stop-process supporte un commutateur -passthru qui pourrait être utile dans cette circonstance

pour que vous puissiez attribuer

$processresult = Stop-Process -Name notepad -Confirm -Passthru

if ($processresult.name -eq "notepad") {echo "R.I.P. Notepad"} else {echo "Notepad lives"}

si l'utilisateur choisit d'arrêter le processus (c'est-à-dire qu'il entre Y), $processresult sera un objet Processus. Si l'utilisateur choisit de ne pas terminer le processus (c'est-à-dire qu'il saisit n), il ne le sera pas. Testez donc l'objet résultant et basez-vous sur celui-ci.

C'est un peu compliqué mais ça devrait marcher.

1voto

David Freitag Points 111

L'écriture d'un bout de code supplémentaire pour la gestion des entrées n'est pas un gros problème. Par exemple,

$input = Read-Host "Would you like to kill notepad?"

if($input.ToLower() -eq "yes") {
    Stop-Process -Name notepad
    Write-Host "R.I.P. Notepad"
} else {
    Write-Host "Notepad lives to fight another day"
}

Cela fonctionnerait très bien et n'ajouterait pas une tonne à votre script.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X