How to keep the shell window open after running a PowerShell script?

126,976

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.

  1. 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"
  2. Per-script Fix: Add a prompt for input to the end of your script file. e.g. Read-Host -Prompt "Press Enter to exit"
  3. 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

Share:
126,976

Related videos on Youtube

JustAGuy
Author by

JustAGuy

Updated on July 05, 2022

Comments

  • JustAGuy
    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?

  • Joel McBeth
    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
    SchreiberLex over 5 years
    OPs 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
    xr280xr almost 2 years
    How can I make a shortcut that opens a PowerShell window (not cmd) with -NoExit and runs SomeScript.ps1?
  • xr280xr
    xr280xr almost 2 years
    It looks like start is what I needed. Created a batch file with start PowerShell -NoExit -File "[.ps1 script path]". Without start it was running PowerShell within the Windows Command prompt.
  • Linus Proxy
    Linus Proxy almost 2 years
    #3 doesn't work on Win 10 Pro v 10.0.19044 Build 19044