将所有内容通过Powershell管道输出到日志文件

3
我很不熟悉PowerShell,我想将所有行通过管道输出到一个日志文件中并记录时间,但我不想明确地将所有命令都管道到日志文件中,以避免视觉混乱并使代码易于扩展。
我不确定现有的方法是否能够实现我的要求,所以希望得到指点或帮助。
1个回答

3
如果你想捕获PowerShell会话中生成的所有输出(包括其他流,如详细或错误消息),你可以在脚本开头使用Start-Transcript,并在结尾处使用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将其指向Verbose输出流和文件。如果启用$VerbosePreference(或在脚本中支持-Verbose),则可以查看Verbose消息。
或者,如果您想重定向脚本的所有输出(不是其他消息流的内容,例如只发送到标准管道的内容),您可以保存脚本,从PowerShell中运行它,然后将其输出管道传递给另一个命令,如Out-File,例如:
.\yourscript.ps1 | Out-File output.txt

谢谢。有没有一种广为人知的方法,可以实现对每行代码进行写日志的行为,而不必将每行代码传递到函数中? - comp.sci.intern
我想你可以将它保存为脚本,然后从 shell 中执行,并将其输出发送到 out-file。 - Mark Wragg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接