web-dev-qa-db-fra.com

Empêchez Powershell de sortir

Je sais qu'il y a ce petit -noexit commutateur pour PowerShell.

Est-il possible de rester dans le Shell sans utiliser cet interrupteur?

En d'autres termes, je veux une ou plusieurs commandes de script qui s'exécutent puis laissent le shell ouvert.

17
rhavin

Ce script ne se fermera pas si vous l'exécutez sans arguments, par exemple en double-cliquant dessus:

param($Work)

# restart PowerShell with -noexit, the same script, and 1
if (!$Work) {
    powershell -noexit -file $MyInvocation.MyCommand.Path 1
    return
}

# now the script does something
# this script just outputs this:
'I am not exiting'
14
Roman Kuzmin

Vous avez essentiellement 3 options pour empêcher la fermeture de la fenêtre de la console PowerShell, que je décris plus en détail sur mon article de blog .

  1. Correctif unique: Exécutez votre script à partir de la console PowerShell ou lancez le processus PowerShell à l'aide du commutateur -NoExit. par exemple. PowerShell -NoExit "C:\SomeFolder\SomeScript.ps1"
  2. Correction par script: Ajoutez une invite de saisie à la fin de votre fichier de script. par exemple. Read-Host -Prompt "Press Enter to exit"
  3. Correctif global: Modifiez votre clé de registre pour toujours laisser la fenêtre de la console PowerShell ouverte une fois le script terminé.

Voir mon blog pour plus d'informations sur les clés de registre à modifier.

On dirait que vous recherchez l'option # 1 ou # 3.

18
deadlydog

As-tu essayé

$Host.enternestedprompt()

Cela arrêtera l'exécution et les déposera dans une invite imbriquée. Lorsqu'ils quittent cette invite, le script se termine et la fenêtre se ferme.

10
mjolinor
"do stuff"
Pause

Oui, tout comme la ligne de commande - sortie:

do stuff
Press Enter to continue...:
3
Kris Morness

La boucle while à la fin de ce script trivial me demande une commande et l'exécute. Il s'exécute avec l'environnement du script, il est donc possible de vérifier les valeurs des variables. La saisie de "exit" met fin à la boucle lorsqu'elle est exécutée.

# Do something.

cd D:\temp
$current_directory = $(pwd)
dir

write-Host  # Just add a little space after the dir

# Stay in the Shell and execute commands.

while ($TRUE) {
  $cmd = Read-Host "PS $(pwd)"
  if ($cmd[0] -eq '"') { iex "& $cmd" } 
    else { iex $cmd }
}

Je suis sûr que d'autres pourront partager certaines améliorations, mais c'est un début. Cordialement.

3
Jim Marek

Je ne connais pas de commande que vous pourriez exécuter dans le script qui empêcherait le shell de se terminer s'il n'avait pas été invoqué à l'aide de -noexit commande.

J'utilise généralement Read-Host "Press ENTER to continue" à la fin si je ne veux pas que le shell se ferme. Cependant, cela n'empêchera pas le shell de se fermer après avoir appuyé sur Entrée s'il n'a pas été démarré avec -noexit.

2
Andy Arismendi

Comme ça?

PowerShell -File  c:\myscript.ps1 -NoExit
1
CB.