我有一个脚本调用“ a.ps1”:
write-host "hello host"
"output object"
Run Code Online (Sandbox Code Playgroud)
我想调用脚本并获取输出对象,但我也希望取消标准输出:
$result = .\a.ps1
# Don't want anything printed to the console here
Run Code Online (Sandbox Code Playgroud)
有什么提示吗?
确实没有简单的方法可以做到这一点。
一种解决方法是通过定义一个具有相同名称的函数来覆盖Write-Host的默认行为:
function global:Write-Host() {}
Run Code Online (Sandbox Code Playgroud)
这是非常灵活的。它适用于我上面的简单示例。但是,由于某些未知的原因,它不适用于我想应用的实际情况(可能是因为被调用的脚本已签名,并且出于安全原因,它不允许调用者任意更改行为)。
我尝试的另一种方法是通过以下方式修改基础控制台的标准输出:
$stringWriter = New-Object System.IO.StringWriter
[System.Console]::SetOut($stringWriter)
[System.Console]::WriteLine("HI") # Outputs to $stringWriter
Write-Host("HI") # STILL OUTPUTS TO HOST :(
Run Code Online (Sandbox Code Playgroud)
但是如您所见,它仍然无法正常工作。
| 归档时间: |
|
| 查看次数: |
11133 次 |
| 最近记录: |