Garder la console PowerShell ouverte après l'exécution du script

Garder la console PowerShell ouverte après l'exécution du script

Si un script est exécuté en double-cliquant dessus ou en faisant un clic droit dessus et en sélectionnant Exécuter avec PowerShell ou Ouvrir avec Windows PowerShell, l’utilisateur verra la console PowerShell apparaître brièvement avant de disparaître. Ce scénario se produit parce que le script se termine naturellement, surtout s’il génère une erreur.

Nous examinerons quelques options pour garder la console PowerShell ouverte après l’exécution du script, et nous les passerons en revue dans cet article.

Empêcher PowerShell de quitter

De manière pratique, Windows PowerShell a un argument switch que nous pouvons transmettre lors de l’exécution de nos scripts. Cet argument est appelé le paramètre -NoExit.

L’ajout de ceci lors de l’exécution d’un script empêchera la console PowerShell de se terminer en cas d’erreur ou si l’exécution du script s’est terminée avec succès.

powershell.exe "C:\PS\sample_script.ps1" -NoExit

Cependant, cela n’est possible que si vous exécutez ou appelez votre script en externe. Que se passe-t-il s’il existe un moyen de maintenir l’écran et de l’empêcher de se terminer lors de l’exécution et de la modification de votre script dans un éditeur de code tel que PowerShell ISE ?

Il se peut qu’il n’y ait pas de commande PowerShell pour le faire de manière native ; cependant, nous pouvons faire preuve de créativité et créer des méthodes pour atteindre notre objectif. Avant de continuer, il convient de noter que vous pouvez utiliser la commande héritée pause pour maintenir l’écran lors de l’exécution d’un script PowerShell.

Production:

Press any key to continue...

Il n’y a peut-être pas d’équivalent pour la commande héritée pause, mais nous pouvons la recréer en utilisant la commande PowerShell Read-Host.

Exemple de code :

Read-Host -Prompt "Press Enter to continue..."

La seule mise en garde à cette méthode est contrairement à la commande pause, elle n’accepte aucun coup de clavier mais n’accepte que la touche Enter pour terminer le script. Cela peut ne pas être similaire à la commande pause, mais l’extrait ci-dessus tiendra toujours l’écran avant de terminer le script.

Il existe un moyen d’empêcher de manière permanente et persistante la fermeture du script en modifiant le registre. Étant donné que le registre a une portée de système d’exploitation, toutes les modifications que nous apporterons affecteront non seulement un script particulier, mais tous les scripts que vous exécuterez à l’avenir.

Alors gardez cela à l’esprit avant de continuer.

Maintenant, pour continuer, nous devons d’abord sauvegarder le registre. Nous manipulerons les fichiers de registre HKEY_CLASSES_ROOT pour cet article, alors reprenons cela en ouvrant l’invite de commande et en exécutant la commande suivante.

reg export HKCR C:\Temp\HKCR.Reg /y

Maintenant que nous avons sauvegardé avec succès notre registre, nous pouvons continuer. Copiez les commandes ci-dessous et enregistrez le fichier avec une extension .reg.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Applications\powershell.exe\shell\open\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"& \\\"%1\\\"\""

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"-Command\" \"if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & \\\"%1\\\"\""

Une fois enregistré, double-cliquez sur le fichier reg nouvellement créé pour que les modifications prennent effet. Les commandes ci-dessus modifieront la politique d’exécution de PowerShell et incluront le paramètre de commutateur -NoExit par défaut lors de l’exécution d’un script PowerShell.

Lors de l’exécution de nos scripts créés, nous n’avons pas besoin d’ajouter un argument -NoExit.

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn