我想在自己的Powershell窗口中依次运行多个Powershell命令,并且不想在运行后关闭这些窗口。
示例:
Start-Process powershell {Write-Host "hello"}; Start-Process powershell
{Write-Host "hello"}; Start-Process powershell {Write-Host "hello"}
Powershell窗口在运行后立即关闭。我希望他们保持开放状态。
编辑:多个命令并不总是相同的,它们的数量可能会有所不同。
答案 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
,才能在新窗口中运行新会话并异步启动它。
此外,该字符串已更改为带有嵌入单引号("..."
的双引号字符串('...'
) ),以确保扩展对$_
(代表手头管道对象(1
,2
或3
)的自动变量的引用 (内插)。
将管道(|
)与输入数组(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