如何将接收作业结果输出到文件?
我尝试了这个,但它不起作用:
$log = "C:\springfield\citrix\CitrixAutomation.log"
Get-Job | Receive-Job | Out-File $log
我还尝试将Get-Job | Receive-Job
的输出保存到变量中,但它不起作用..
$log = "C:\springfield\citrix\CitrixAutomation.log"
$getjobarr = @()
Function LogWrite
{
Param ([array]$logstring)
$logstring | Out-File $log -Append
}
$getjobarr += Get-Job | Receive-Job
LogWrite $getjobarr
我认为Get-Job
和Receive-Job
只能输出到控制台,那么我该如何实现呢?
感谢您的帮助
答案 0 :(得分:5)
工作"输出"可以重定向到文件,例如:
PS> Start-Job {Get-ChildItem C:\users\keith}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 BackgroundJob Running True localhost Get-ChildItem C:\users...
PS> Receive-Job -id 2 | Out-File job.log
PS> gc .\job.log
Directory: C:\users\keith
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 1/21/2014 8:24 PM <DIR> .ssh
d---- 9/9/2014 10:00 PM <DIR> Bin
d-r-- 9/11/2014 9:20 PM <DIR> Contacts
d-r-- 9/11/2014 9:20 PM <DIR> Desktop
如果你在工作中运行的任何东西写给主持人,那么是的,你已经被软管了。如果您控制它,请使用write-output而不是write-host。此外,请确保在收到输出之前等待每个作业完成,除非您可以等待,直到作业状态更改为“已完成”或“失败”。在询问输出之前,您可以使用Wait-Job等待作业完成。
答案 1 :(得分:0)
要添加到Keith的答案中:
我花了整整一天时间来研究具有十二个功能的复杂脚本。我的Out-File只能输出到Console或Console&txt文件,但我永远无法将其隐藏在Console中。
我的修复程序分两个步骤:
1. *>&1在Receive-Job cmdlet
$logfile = "$env:LOCALAPPDATA\temp\ScriptResult.txt"
Get-Job | foreach-object {
Receive-Job -name $_.name *>&1 >> $logfile
"`r`n=====================================" | Out-File -FilePath $logfile -Append
}
*>&1是关键。它强制所有数据流(信息和错误)进入输出,因此所有内容都出现在日志文件中
(如果您希望将其写出,则可以通过管道代替“ >>”发送到“ Out-File”。)
2.查找并用Write-Output替换所有Write-Host cmdlet
我的大多数功能都有针对错误消息的Write-Host解释。即使当我使用*>&1重定向流时,它也会导致输出显示在控制台上。替换为Write-Output修复了该问题。
感谢基思提供的重要信息,我在其他任何地方都找不到! :D
(适用于PSVersion v5.1,Win10)