Powershell:无法将Invoke-Expression的输出存储在变量中

时间:2013-05-28 15:43:59

标签: powershell

我有一个相当冗长的Powershell脚本,我想从另一个脚本调用。目前,我正在使用Invoke-Expression进行此调用,并且运行良好:

    $argumentList = @()
    $argumentList += ("-oldaccount", ($oldDomain + "\" + $oldUname), "-newaccount", ($newDomain + "\" + $newUname))

    $output = Invoke-Expression "C:\path\to\script.ps1 $argumentList"

我正在调用的脚本使用Write-Host将其输出行写入屏幕。我想在调用者脚本中捕获此输出,以便我可以将其放在日志文件中,理想情况下,我想在不修改我正在调用的脚本的情况下执行此操作。我在How to pipe output of Invoke-Expression to string?尝试了这个建议没有运气 - 当我在ISE中运行代码时,我只是将输出输出到屏幕并且变量保持为空。我是否需要做一些不同的事情,因为我正在调用另一个Powershell脚本而不是可执行文件?

1 个答案:

答案 0 :(得分:0)

写主机不适合你。尝试在内部脚本中返回一个值,例如:

InnerScript.ps1可以是:

return "Test"

然后OuterScript.ps1应为:

$output = Invoke-Expression ".\InnerScript.ps1"

Write-Host($ output)应显示:

Test

根据您的具体情况调整此示例。希望它有所帮助。