![主要問題](https://rvso.com/image/1558694/%E4%B8%BB%E8%A6%81%E5%95%8F%E9%A1%8C.png)
我正在努力解決一些本來應該很簡單但似乎不太容易解決的問題。我有一個動態的 powershell 命令序列要運行。它是我為自己編寫的一些模板的一部分,以使我的工作流程更加輕鬆。
這是產生的分組命令的簡單範例:
$commands = {
Write-Output "Navigating to tools->deploy";
Set-Location "C:\tools\deploy\";
Write-Output "OK. Run dd.ps1 [server name] to deploy.";
}
可以$commands
使用 來運行它Invoke-Command
。所以最終我有了這個處理它的函數:
function invokeNow() {
param([string]$c)
Invoke-Command $c;
}
這很好用。它執行視窗中物件中的命令。但隨著時間的推移,我為它添加了更多功能。對於每個新指令,我每次都必須打開 powershell...那是因為有時,當腳本運行時我無法發出另一個函數。所以,我現在的目標是在新的窗口,以便我可以使用同一個 shell 窗口來呼叫多個任務(在它們自己的窗口中運行)。我認為這會很簡單,所以我將函數更改為
function invokeNow() {
param([string]$c)
Invoke-Expression "cmd /c start powershell -Command {$c} -NoProfile -NoExit";
}
這導致了這個結果:
#< CLIXML
#< CLIXML
PS C:\tools\deploy\>
導航確實有效。但是,我的輸出資訊丟失了。有些命令添加了deploy S1 foo
或等指令deploy FS -src "data"
。這些有時很難記住。為此,我有兩個小問題:(1)我的Write-Output
資料在哪裡? (2)那個奇怪的CLIXML
東西是什麼(根據Google的說法似乎是「特殊的」powershell XML)?當我exit
關閉該視窗時,我在視窗關閉之前看到了一堆 XML 內容。
主要問題
是否可以開啟一個新的powershell窗口,然後正確執行我的物件中的命令$commands
(從而包括Write-Output
資料)?
我已經嘗試添加Invoke-Command
到上面的內容中,例如
Invoke-Expression "cmd /c start powershell -Command {Invoke-Command -ScriptBlock $c} -NoProfile -NoExit";
但是新視窗會吐出很多 XML 內容...
版本資訊
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.16299.251
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.16299.251
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1