[英]Not able to capture output by runas command
我必須自動化測試用例。
任務:-
步驟:-批處理文件包括一些命令集,包括一個 exe 的執行。
例如:- runas /user:administrator /savecred someCmd.exe >>D:\output.txt
步驟:- 在變量中捕獲 exe 的 output 以驗證 output。
我已經使用“start-process -verb runas cmd.exe $param”cmdlet 來打開管理命令提示符(步驟 1)。 其中 $param 包含要執行的批處理文件。
問題陳述:- 當批處理文件執行上述 runas 命令時,它會打開一個新的命令提示符,並且 output 會顯示在提示符中並自行關閉。 我無法捕獲輸出(未寫入 output.txt),基於此我必須進行一些驗證。
您可以使用批處理的輸出重定向:
$params="/C ipconfig /all 2>&1 >>c:\temp\test.txt"
start-process -verb runas cmd.exe $params
gc c:\temp\test.txt
解決方案
runas
命令中執行了一個批處理文件。 例如: runas /user:administrator /savecred mybatch.bat
someCmd.exe >>D:\output.txt
現在輸出被捕獲並寫入文件。 我的目標是捕獲命令的輸出,這就是我解決它的解決方案。
我最終創建了一個包含至少兩個參數的包裝批處理文件 OutputWrapper.bat:
1) 輸出文件
2) 命令
3) [可選] 參數
@ECHO OFF
IF "%2" == "" GOTO usage
SET OUTPUTFILE=%1
SET COMMAND=%2
SET ARGS=
SHIFT /2
:loop1
IF "%2"=="" GOTO exec
SET ARGS=%ARGS% %2
SHIFT
GOTO loop1
:exec
ECHO Command [%COMMAND%]
ECHO Arguments [%ARGS%]
ECHO Output file [%OUTPUTFILE%]
%COMMAND%%ARGS% > %OUTPUTFILE% 2>&1
GOTO end
:usage
ECHO Usage: %~nx0 outputfile command [arguments]
:end
並像這樣從 PowerShell 調用它:
$outFile = "C:\Temp\Deploy.out";
Start-Process -FilePath .\OutputWrapper.bat -ArgumentList "$outfile","whoami.exe","/priv" -Verb RunAs -Wait
Get-Content $outFile;
我遇到了同樣的問題並通過使用gsudo解決了它。 它讓我運行提升的命令並將輸出從它傳送回來。
gsudo {command-to-execute}
改進Loïc MICHEL 的答案,因為沒有-Wait
, Get-Content
很可能會在過程完成之前運行。 由於 output 直到進程結束才被寫入, Get-Content
由於文件不存在而失敗。
$param = "ipconfig /all"
$args = "/C $param 2>&1 > C:\temp\test.txt"
Start-Process -FilePath cmd.exe -ArgumentList $args -Verb RunAs -Wait
Get-Content -Path C:\temp\test.txt
或者,使用powershell.exe
和操作系統臨時目錄中的隨機文件:
$CommandWithParameters = "gpresult /scope computer /z"
$OutputFile = Join-Path -Path ([System.IO.Path]::GetTempPath()) -ChildPath ([System.IO.Path]::GetRandomFileName())
$Arguments = ("{0} 2>&1 > {1}" -f $CommandWithParameters, $OutputFile)
Start-Process -FilePath powershell.exe -ArgumentList $Arguments -Verb RunAs -Wait
Get-Content -Path $OutputFile
使用powershell.exe
將使用 UCS-2 LE BOM 編碼保存 output 文件。 如果您使用cmd.exe
,編碼將是 ANSI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.