记录一个大的Powershell脚本

时间:2012-06-07 00:08:51

标签: logging powershell

我正在为服务器安装编写一个大脚本,我希望它是完全自动的,但也希望开发人员能够在它中断时修复它(因为它可能会!)。为此,我想象使用Write-Output,Write-Debug,Write-Verbose,Write-Warning。

如何将所有这些写入写入(并加盖时间戳)到.txt文件?另外,我知道通常Write-Error通常用红色写,但.txt文件中没有颜色。有没有办法帮助区分它们,比如可能给它们所有的写入前缀,如Debug,Warning等?

2 个答案:

答案 0 :(得分:6)

哦,来吧!为什么要使用文本文件旧时尚日志记录,在整个操作系统中分散信息,需要由负责生产的人员用镊子收集?

由于PowerShell适用于.NET,您可以使用Even Tracing for Windows(ETW)或使用系统日志。

您可以为所有脚本创建和使用一个PowerShell日志,以便为负责生产的人员发布执行(信息)和错误的详细信息(与良好的异常处理协调)。您可以为一个脚本专用日志(因为它存在DNS等日志)。

这是一个例子(PowerShell V2拥有它自己的CmdLets):

# List of logs
Get-EventLog -list

# Creating your own log
New-EventLog -LogName "SlxScripting" -Source "MaSource"

# List of logs
Get-EventLog -list

# Writting in your own log
Write-EventLog -LogName "SlxScripting" -EventId 12 `
               -Message "Mon Message" 
               -Source "MaSource" -EntryType Warning

# Reading (consuming) in your own log
Get-EventLog -LogName "SlxScripting"  

# Suppressing your log (if needed)
Remove-EventLog -LogName "SlxScripting"

答案 1 :(得分:3)

不幸的是,

Write-(Error|Debug|Verbose)不支持写入文件。所以我创建了这个Write-Log函数来解决这个缺点:

http://poshcode.org/3270

一些示例用法:

Write-Log -Message "It's all good!" -Path C:\MyLog.log -Clobber -EventLogName 'Application'
Write-Log -Message "Oops, not so good!" -Level Error -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "My Script"
Write-Log -Message "Just another example" -Level Warn