我可以从 PowerShell 运行以下命令来启动另一个 PowerShell 实例,更改窗口名称,然后ls
从新的 PowerShell 实例运行命令并打开 Chrome 到特定的网站。
start powershell `
"-noexit", `
"`$host.ui.RawUI.WindowTitle` = 'list files and goto SO'; `
ls ;`
Start-Process chrome.exe https://stackoverflow.com/"
如何在新的 Windows 终端 (wt) 中执行同样的事情?
从 PowerShell 运行以下命令将打开 wt 到“Windows Powershell”配置文件并更改“Windows Powershell”选项卡的标题。
start wt '-p "Windows PowerShell" --title "list files and goto SO" '
但是,我无法传递任何其他命令在 Windows 终端“Windows Powershell”配置文件 shell 中执行。
目前可以实现吗?
我知道以下情况: https://github.com/microsoft/terminal/pull/3495 https://docs.microsoft.com/en-us/windows/terminal/command-line-arguments?tabs=windows
答案1
这使用 Windows 终端的命令行参数这篇文章在我看来有点不清楚(甚至令人困惑)。但是,(默认)wt
命令new-tab
提供了commandline
参数以及(或代替?)参数-p profile-name
。所以使用命令行定义为powershell.exe -Help
。例如
wt PowerShell.exe -NoExit -Command "& {$Host}"
从 Windowscmd
命令提示符,或wt.exe PowerShell.exe -NoExit -Command "& {`$Host}"
从公开PowerShell
会议(注意逃逸美元符号和明确使用.exe
文件扩展名在wt.exe
)。
顺便提一句,我看不出这是因为我将默认配置文件设置为Windows PowerShell下。wt PowerShell.exe -NoExit -Command "& {$Host}"
和之间有什么区别wt -p "Windows PowerShell" PowerShell.exe -NoExit -Command "& {$Host}"
。在这两种情况下,标签页PowerShell
都会开始显示wt
…settings.json
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\
不幸的是,分号 ( ;
) 在一个实例中用于wt
创建新选项卡;因此,它不适用于作为 PowerShell 命令分隔符。因此,
wt PowerShell.exe -NoExit -Command "& {$Host; $PWD}"
将要失败我不知道如何逃避,但我知道解决方法:wt PowerShell.exe -NoExit -Command "& {$Host, $PWD}"
;尽管这样做仍然是可能的,但我发现了一个常规的解决方案最近:使用\
(反斜杠)作为;
(分号)它的wt
参数的转义字符:wt PowerShell.exe -NoExit -Command "& {$Host\; $PWD}"
。
对于更复杂/高级的命令,应用分组运算符( )
在与您的用例类似的用例中如下(从打开的PowerShell
会话中运行):
wt.exe PowerShell.exe -NoExit -Command "& {(`$Host.UI.RawUI.WindowTitle='list files and goto SO'),`$PWD.Path,(Push-Location D:\Downloads),(ls e*.ps1),(Start-Process -PassThru chrome.exe https://stackoverflow.com/)}"
Windows 终端中的结果如下:
上述代码将暂停父级,Powershell
直到终端关闭;如果你想继续在父级中Powershell
使用
Start-Process wt.exe -ArgumentList "PowerShell.exe", "-NoExit", "-Command", "& {(`$Host.UI.RawUI.WindowTitle='list files and goto SO'),`$PWD.Path,(Push-Location D:\Downloads),(ls e*.ps1),(Start-Process -PassThru chrome.exe https://stackoverflow.com/)}"
编辑:
Windows 终端使用\
(反斜杠)作为;
(分号)的转义字符。因此,我将后一种解决方法替换为等效的常规的解决:
Start-Process wt.exe -ArgumentList "PowerShell.exe", "-NoExit", "-Command", "& {`$Host.UI.RawUI.WindowTitle='list files and goto SO'\;`$PWD.Path\;Push-Location D:\Downloads\;ls e*.ps1\;Start-Process -PassThru chrome.exe https://stackoverflow.com/}"
或者,使用-p
标志:
Start-Process wt.exe -ArgumentList '-p "Windows PowerShell"', "PowerShell.exe", "-NoExit", "-Command", "& {`$Host.UI.RawUI.WindowTitle='list files and goto SO'\;`$PWD.Path\;Push-Location D:\Downloads\;ls e*.ps1\;Start-Process -PassThru chrome.exe https://stackoverflow.com/}"