我正在尝试存储来自的输出Invoke-expression
到变量以及屏幕上。我有 PS 日志记录,它会自动将所有内容记录为Write-Host
在一个文件中。现在我正在使用Invoke-Expression
这似乎要么在屏幕上打印输出,要么打印到变量,我需要两者
我所尝试过的只是:
$var = "C:\ER\work\Canny.exe -Init ER\ER2 Get-ip"
$val = Invoke-Expression $var
这不会在屏幕上打印任何内容,因此我无法知道运行时是否存在任何问题。我后来做了一个Write-Host
of $val
它会记录它,但有时为时已晚,无法知道发生了什么
如果我使用:
Invoke-Expression $var
(显然)没有记录任何内容,但是有控制台输出,如果我想在一段时间后查看日志中发生了什么,我无法进行调查。
我也尝试过:
Invoke-Expression $var -OutVariable out
OR
Invoke-Expression $var -OutVariable $out
这在这里没有用。我还创建了一个脚本块并尝试使用
Invoke-Command
但同样没有用,我只需要它在屏幕上打印输出以及变量。
Invoke-Expression -Command $var -OutVariable out
应该可以工作(变量+控制台输出),但是发生了一些奇怪的事情。它在 ISE 中工作,但在普通的 PowerShell 控制台中我得到一个空的ArrayList
。如果你将它传递给另一个命令,例如Out-String
它可以工作(但这会返回一个多行字符串)。
Invoke-Expression -Command $var | Out-String -OutVariable out
要么我忘记了什么,要么它可能是一个错误Invoke-Expression
.
解决方法是使用Tee-Object https://technet.microsoft.com/en-us/library/hh849937.aspx其行为与-OutVariable
.
Tee-Object cmdlet 重定向输出,即发送输出
两个方向的命令(如字母“T”)。它存储了
输出到文件或变量中,并将其发送到管道中。如果
Tee-Object 是管道中的最后一个命令,命令输出为
出现提示时显示。
Example:
Invoke-Expression $var -OutVariable | Tee-Object -Variable out
或(到文件):
Invoke-Expression $var -OutVariable | Tee-Object -FilePath c:\text.txt
请注意,它会覆盖中的内容$out
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)