Stop Powershell from exiting

2019-04-18 09:33发布

I know that there is that little -noexit switch for PowerShell.

Is there anyway of staying in the shell without using that switch?

In other words, I want a script command(s) that executes then leaves the shell open.

8条回答
神经病院院长
2楼-- · 2019-04-18 10:07

The while loop at the end of this trivial script prompts me for a command and executes it. It runs with the environment of the script, so it is possible to check the values of variables. Entering "exit" terminates the loop when it is executed.

# 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 }
}

I'm sure that others will be able to share some refinements, but this is a start. Regards.

查看更多
啃猪蹄的小仙女
3楼-- · 2019-04-18 10:08

I'm not aware of a command you could run in the script that would prevent the shell from exiting if it had not been invoked using the -noexit command.

I typically use Read-Host "Press ENTER to continue" at the end if I don't want the shell to close. However this won't prevent the shell from closing after you press enter if it had not been started with -noexit.

查看更多
叛逆
4楼-- · 2019-04-18 10:15
"do stuff"
Pause

Yes, just like commandline -- output:

do stuff
Press Enter to continue...:
查看更多
女痞
5楼-- · 2019-04-18 10:15

Not to revive a 6-year-old thread or anything, but it should be noted to anyone reading that you can end your script with

Stop-Process -processname regedit

if you have the registry tweak (global fix) enabled and actually want to run an automatically-closing script.

查看更多
小情绪 Triste *
6楼-- · 2019-04-18 10:24

Have you tried

$host.enternestedprompt()

That will stop execution and drop them to a nested prompt. When they exit that prompt, then the script will finish and the window will close.

查看更多
狗以群分
7楼-- · 2019-04-18 10:26

This script will not exit if you run it without arguments, e.g. by double-clicking on it:

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'
查看更多
登录 后发表回答