Powershell管道全部记录

时间:2017-06-26 20:33:38

标签: powershell logging powershell-v4.0

我对powershell非常陌生,我希望将所有行都传输到输出文件以便及时记录,但我不想将所有cmdlet显式地传递给日志文件避免视觉混乱并使代码易于扩展。

我不确定现有的方法是否符合我的要求,我只是无法识别它,或者除了任何指针或帮助之外还会感激。

1 个答案:

答案 0 :(得分:3)

如果要捕获PowerShell会话中生成的所有输出(包括其他流,例如详细消息或错误消息),您可以在脚本开头使用Start-Transcript,并在{0}处使用Stop-Transcript端。

如果要输出特定的日志条目,请考虑使用Write-Log函数,如下面的答案中所述:Create Log File in Powershell

或者这是一个简单的版本来开始:

function Write-Log {
    Param(
        $Message,
        $Path = "$env:USERPROFILE\log.txt"
    )

    function TS {Get-Date -Format 'hh:mm:ss'}
    "[$(TS)]$Message" | Tee-Object -FilePath $Path -Append | Write-Verbose
}

Write-Log 'Some message'

这会在消息开头添加时间戳,并通过Tee-Object将其定向到详细输出流和文件。如果您通过$ VerbosePreference(或通过在脚本中支持-Verbose)启用它们,则可以看到详细消息。

或者,如果要重定向脚本中不是其他消息流的所有输出(例如,仅发送到标准管道的内容),您可以保存脚本,从PowerShell中运行它,然后将其输出管道输出到另一个命令,如Out-File,例如:

.\yourscript.ps1 | Out-File output.txt