在自己的窗口中依次运行Powershell命令并防止其退出

时间:2018-08-05 01:12:52

标签: powershell

我想在自己的Powershell窗口中依次运行多个Powershell命令,并且不想在运行后关闭这些窗口。

示例:

Start-Process powershell {Write-Host "hello"}; Start-Process powershell 
{Write-Host "hello"}; Start-Process powershell {Write-Host "hello"}

Powershell窗口在运行后立即关闭。我希望他们保持开放状态。

编辑:多个命令并不总是相同的,它们的数量可能会有所不同。

2 个答案:

答案 0 :(得分:3)

# Asynchronously starts 3 new PowerShell windows that 
# print "hello #<n>" to the console and stay open.
1..3 | ForEach-Object { 
  Start-Process powershell -Args '-noexit', '-command', "Write-Host 'hello #$_'" 
}
  • -noexit需要使用-command执行命令后保持PowerShell会话打开(运行powershell.exe -?以查看所有CLI参数)

  • 请注意如何分别指定 ,作为传递给
    数组,分隔元素 -Args-ArgumentList的缩写,尽管在这种情况下可以完全省略参数名称)。

  • 请注意如何将Write-Host命令作为 string 传递-在这种情况下,脚本块不被支持;您可以按照尝试传递一个,但是它会被悄悄地转换为一个 string ,这仅表示已使用其文字内容{之间的所有内容和})。
    换句话说:传递{Write-Host "hello"}'Write-Host "hello"'相同,但为避免混淆,您应传递 string

    • 仅当您直接调用powershell.exe 而不是通过Start-Process时,才能传递脚本块。您需要Start-Process,才能在新窗口中运行新会话并异步启动它。

    • 此外,该字符串已更改为带有嵌入单引号"..."双引号字符串('...') ),以确保扩展对$_(代表手头管道对象(123)的自动变量的引用 (内插)。

管道|)与输入数组(1..3一起使用,其结果为1, 2, 3 cmdlet只是一个例子-您仍然可以在一行上或以ForEach-Object分隔一行,一个接一个地地单独调用各个命令-多亏了;异步启动。

但是,如果单个命令共享逻辑,则流水线方法可以简化事务;您可以将共享逻辑放在Start-Process调用的主体中,并通过管道将变量部分作为输入传递。

答案 1 :(得分:0)

在命令序列的末尾放置一个读取主机-它会等待您输入一些内容,然后继续执行(并可能退出?)。要复制/粘贴此链接中的示例,您可以执行以下操作来暂停执行,直到您输入以下内容:$Age = Read-Host "Please enter your age"-> Ref:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/read-host?view=powershell-6