【问题标题】:Not able to capture output by runas command无法通过 runas 命令捕获输出
【发布时间】:2014-12-01 14:23:03
【问题描述】:
我必须自动化测试用例。
任务:-
- 步骤:- 从 powershell 打开管理命令提示符。
- 步骤:- 在管理命令提示符下执行批处理文件。
-
步骤:-批处理文件包含一些命令集,包括一个 exe 的执行。
例如:- runas /user:administrator /savecred someCmd.exe >>D:\output.txt
步骤:- 在变量中捕获 exe 的输出以验证输出。
我用过“
start-process -verb runas cmd.exe $param" 用于打开管理命令提示符的 cmdlet(步骤 1)。
其中 $param 包含要执行的批处理文件。
问题说明:- 当批处理文件执行上面提到的 runas 命令时,它会打开一个新的命令提示符并在提示符中显示输出并自行关闭。
我无法捕获输出(未写入 output.txt),我必须据此进行一些验证。
【问题讨论】:
标签:
windows
powershell
batch-file
scripting
cmd
【解决方案1】:
您可以使用批处理中的输出重定向:
$params="/C ipconfig /all 2>&1 >>c:\temp\test.txt"
start-process -verb runas cmd.exe $params
gc c:\temp\test.txt
【解决方案2】:
我最终创建了一个包含至少两个参数的包装批处理文件 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;
【解决方案3】:
解决方案
- 从 powershell 打开管理命令提示符。
- 在
runas 命令中执行了一个批处理文件。例如:runas /user:administrator /savecred mybatch.bat
- 批处理文件包括一些命令集,包括一个 exe 的执行。例如
someCmd.exe >>D:\output.txt
- 在变量中捕获 exe 的输出以验证输出。
现在输出被捕获并写入文件。我的目标是捕获命令的输出,这就是我解决它的方法。