How to keep the shell window open after running a PowerShell script?
Solution 1
You basically have 3 options to prevent the PowerShell Console window from closing, that I describe in more detail on my blog post.
-
One-time Fix: Run your script from the PowerShell Console, or launch the PowerShell process using the -NoExit switch. e.g.
PowerShell -NoExit "C:\SomeFolder\SomeScript.ps1"
-
Per-script Fix: Add a prompt for input to the end of your script file. e.g.
Read-Host -Prompt "Press Enter to exit"
-
Global Fix: Change your registry key by adding the
-NoExit
switch to always leave the PowerShell Console window open after the script finishes running.
Registry Key: HKEY_CLASSES_ROOT\Applications\powershell.exe\shell\open\command
Description: Key used when you right-click a .ps1 file and choose Open With -> Windows PowerShell.
Default Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "%1"
Desired Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "& \"%1\""
Registry Key: HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Command
Description: Key used when you right-click a .ps1 file and choose Run with PowerShell (shows up depending on which Windows OS and Updates you have installed).
Default Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
Desired Value: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & \"%1\""
See my blog for more information and a script to download that will make the registry change for you.
Solution 2
Errr... I should have known:
powershell -noexit <path\script>
and that's all there's to it :)
Solution 3
The solution below prevents the script from closing when running Powershell ISE and allows the script to close otherwise.
# If running in the console, wait for input before closing.
if ($Host.Name -eq "ConsoleHost")
{
Write-Host "Press any key to continue..."
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null
}
Solution 4
In my own case, I wanted to add powershell to context menu on windows 7. That is right clicking on a folder or inside a folder to get a menu to launch Powershell window without it closing after launch. The answers here helped me do just that and I want to share it here incase it helps someone else.
- Launch registry editor by pressing WIN + R type regedit.exe and hit enter
- Navigate to HKEY_CLASSES_ROOT\Directory\Background\shell
- Right click on shell and create a key give it a name e.g PowershellHere
- On the right pane, double click on Default and provide a descriptive name e.g Powershell Here
- Right click on the PowershellHere key you created earlier and create a new key and name it "command" please make sure you name it exactly so but without the quotes.
- On the right pane, double click on Default and then type the command below
- C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -noexit -Command CD '"%1"' -noexit flag makes sure that the Powershell windows does not close again immediately after launch '"%1"' flag represents the folder you right clicked -Command CD '"%1"' will ensure the Powershell changes into the right clicked directory.
To make the right click work inside a folder meaning right clicking an empty space inside a folder, repeat the steps but this time, the registry location is:
HKEY_CLASSES_ROOT\Directory\shell
And the command is:
C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -noexit
Tested on windows 7 ultimate sp1 but I think I might work for later versions of Windows as well
Related videos on Youtube
JustAGuy
Updated on July 05, 2022Comments
-
JustAGuy almost 2 years
I have a very short PowerShell script that connects to a server and imports the AD module. I'd like to run the script simply by double clicking, but I'm afraid the window immediately closes after the last line.
How can I sort this out?
-
Peter Mortensen over 8 yearsRelated (duplicate): How to get PowerShell to keep a command window open?
-
-
Joel McBeth over 8 years@IgorGanapolsky The problem might be that you are appending -NoExit after the script path, it needs to go before. I think if it is after it passes it as an argument to the script instead of powershell.exe.
-
SchreiberLex over 5 yearsOPs answer also works as per-script fix: wrap your script with a
powershell -NoExit -Command { <The script to actually run> }
Enables user to start the script via UI and see the results without editing registry keys -
xr280xr almost 2 yearsHow can I make a shortcut that opens a PowerShell window (not cmd) with
-NoExit
and runs SomeScript.ps1? -
xr280xr almost 2 yearsIt looks like
start
is what I needed. Created a batch file withstart PowerShell -NoExit -File "[.ps1 script path]"
. Withoutstart
it was running PowerShell within the Windows Command prompt. -
Linus Proxy almost 2 years#3 doesn't work on Win 10 Pro v 10.0.19044 Build 19044