接收作业输出到文件

时间:2014-09-12 15:19:40

标签: powershell powershell-v3.0

如何将接收作业结果输出到文件?

我尝试了这个,但它不起作用:

$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-JobReceive-Job 只能输出到控制台,那么我该如何实现呢?

感谢您的帮助

2 个答案:

答案 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)