我正在开始一项工作,我需要在工作完成之前接收输出。它使用 write-host 而不是 write-output,我知道当我使用 write-output 时这应该不会有问题,但假设我需要使用 write-host。
举个例子,我有一份工作
$job = Start-Job -Name $taskId -ScriptBlock { Write-host "This is the job output, there is a keyword"; start-sleep 2 }
我需要检索控制台输出并检查其中的关键字,因此我使用receive-job
$result = Receive-Job -Job $job -Keep -ErrorAction SilentlyContinue *>&1
我使用 *>&1 来捕获每个输出。但我需要抑制控制台输出并仅将输出分配给变量。不幸的是,我无法抑制控制台日志。使用 Out-Null 也无法填充变量。
有办法吗?
谢谢
您可以通过检查子作业的
.Information
属性Receive-Job
来捕获作业的主机输出。在这种情况下,您也可以使用,但作业主机输出仍将是控制台输出。您需要重定向
write-host
脚本块内部。为此,您需要将 InformationStream(6) 重定向到 SuccessStream(1)。
请注意:这意味着
$result
SuccessStream 中有一个 PSObject。任何装饰(如颜色)都将丢失。
这只是为了了解其
Write-Host
工作原理和局限性,还是有一些特定的需求?