我对powershell非常陌生,我希望将所有行都传输到输出文件以便及时记录,但我不想将所有cmdlet显式地传递给日志文件避免视觉混乱并使代码易于扩展。
我不确定现有的方法是否符合我的要求,我只是无法识别它,或者除了任何指针或帮助之外还会感激。
答案 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