這是程式。我正在使用戴爾命令 | 配置。命令列命令如下:
"C:\Program Files (x86)\Dell\Command Configure\X86_64>cctk.exe" --wakeonlan
在 Powershell 中,您可以導航到該檔案夾??并運行:
./cctk.exe --wakeonlan
我可以將上述命令通過管道傳輸到一個變數中并獲取我需要的資訊。這需要我的 shell 相應地 cd 進入檔案夾并相應地運行。
$test = ./cctk.exe --wakeonlan
這會給你一個輸出。但是,當您使用 start-process 時,您不會得到任何輸出,因為這是一個命令列命令。將出現一個 cmd 螢屏并運行該命令。所以,我添加了一個 -nonewwindow 和 -wait 標志。輸出現在出現在螢屏上,但我似乎無法捕獲它。
$test = start-process "C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" -ArgumentList @("--wakeonlan") -NoNewWindow -Wait
此時測驗為空。我也嘗試使用 Out-File 來捕獲資訊。沒有成功。該命令輸出到螢屏,但沒有其他地方。
我還嘗試了 cmd 方法,您可以使用 /C 標志通過管道傳輸資訊。
$test = Start-Process cmd -ArgumentList '/C start "C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" "--wakeonlan"' -NoNewWindow -Wait
但是,我嘗試了此命令的許多變體,但都沒有成功。有人說 C:\Program 無法識別。有些只是打開命令提示符。上面說--wakeonlan 是一個未知命令。
任何指標都會有很大幫助。
uj5u.com熱心網友回復:
有多種方法可以運行它而不會增加啟動程序的復雜性。
臨時添加到路徑:
$env:path = ';C:\Program Files (x86)\Dell\Command Configure\X86_64;'
cctk
呼叫接線員:
& 'C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk'
反引號所有空格和括號:
C:\Program` Files` `(x86`)\Dell\Command` Configure\X86_64\cctk
uj5u.com熱心網友回復:
詳細說明js2010 的有用答案:
簡而言之:因為您的可執行路徑被參考,直接呼叫需要使用&,呼叫運算子,出于語法原因 - 請參閱此答案了解詳細資訊。
要同步執行控制臺應用程式或批處理檔案,并捕獲它們的輸出,叫他們直接($output = c:\path\to\some.exe ...或$output = & $exePath ...),就不能使用Start-Process(或System.Diagnostics.Process它是基于API) -看到這個答案以獲取更多資訊。
如果您確實使用Start-Process,這在特殊情況下可能是必要的,例如需要以不同的用戶身份運行:
捕獲輸出的唯一方法是通過
-RedirectStandardOutput/-RedirectStandardError引數在文本檔案中。請注意,輸出檔案的字符編碼由[Console]::OutputEncoding[1] 中存盤的編碼決定,該編碼反映當前控制臺輸出代碼頁,默認為系統活動的舊版OEM代碼頁。相比之下,即使有
-NoNewWindow -Wait,直接捕捉輸出,$output = ...確實沒有作業,因為啟動行程寫入直接到控制臺,繞過PowerShell的成功輸出流,這是其內容變數賦值捕獲的一個。
[1] PowerShell 在直接呼叫中使用相同的編碼來解碼來自外部程式的輸出-有關詳細資訊,請參閱此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/366188.html
標籤:电源外壳 命令行 启动进程 powershell-5.1
下一篇:azure中的服務主體監控
