我想运行一个外部进程,并将它的命令输出捕获到PowerShell中的一个变量。我目前正在使用这个:

$params = "/verify $pc /domain:hosp.uhhg.org"
start-process "netdom.exe" $params -WindowStyle Hidden -Wait

我已经确认该命令正在执行,但我需要将输出捕获到一个变量中。这意味着我不能使用-RedirectOutput,因为它只重定向到一个文件。


当前回答

或者试试这个。它将输出捕获到变量$scriptOutput:

& "netdom.exe" $params | Tee-Object -Variable scriptOutput | Out-Null

$scriptOutput

其他回答

如果您所要做的只是捕获命令的输出,那么这将工作得很好。

我使用它来更改系统时间,因为[timezoneinfo]::local总是产生相同的信息,即使在您对系统进行了更改之后。这是我可以验证和记录时区更改的唯一方法:

$NewTime = (powershell.exe -command [timezoneinfo]::local)
$NewTime | Tee-Object -FilePath $strLFpath\$strLFName -Append

这意味着我必须打开一个新的PowerShell会话来重新加载系统变量。

你有没有试过:

$OutputVariable = (Shell命令)| Out-String

对我来说,当使用外部命令时,当标准错误和标准输出流都可能是运行命令(或它们的混合)的结果时,我的诀窍是:

$output = (command 2>&1)

我得到了以下工作:

$Command1="C:\\ProgramData\Amazon\Tools\ebsnvme-id.exe"
$result = & invoke-Expression $Command1 | Out-String

$result为您提供所需的

我尝试了答案,但在我的情况下,我没有得到原始输出。相反,它被转换为一个PowerShell异常。

我得到的原始结果是:

$rawOutput = (cmd /c <command> 2`>`&1)