【发布时间】:2014-08-16 06:59:25
【问题描述】:
正在运行这个 powershell 命令并将输出保存在 csv 中。
powershell "Get-WinEvent -EA SilentlyContinue -FilterHashtable @{Logname='System';ID=42}| SELECT-Object @{Label = 'TimeCreated'; Expression = {Get-Date $_.TimeCreated -Format 'yyyy-MM-dd HH:mm:ss'}},@{Label = 'DayOfWeek'; Expression = {(Get-Date $_.TimeCreated).DayOfWeek}},ID,@{l='ID Description';e={Switch ($_) { {$_.ID -eq '42'}{'Type=Sleep matched using EventID';break} {$_.MESSAGE -Match 'Sleep Reason: Application API'}{Type='Sleep matched using Message';break} }}},MESSAGE|ConvertTo-Csv -NoTypeInformation | %{ $_ -replace """`r`n""",',' } | select -Skip 1 | Out-File -Append c:\logs\timeline\TEMP_TimeLine.csv"
我得到的预期结果如下:
"2014-05-10 00:00:04","Saturday","42","Type=Sleep matched using EventID","The system is entering sleep.,,Sleep Reason: Application API"
"2014-05-09 00:00:02","Friday","42","Type=Sleep matched using EventID","The system is entering sleep.,,Sleep Reason: Application API"
"2014-05-08 00:00:02","Thursday","42","Type=Sleep matched using EventID","The system is entering sleep.,,Sleep Reason: Application API"
但是,如果我在开关内切换两个 case 语句的位置,我不会得到预期的输出(派生字段“ID 描述”为空白)。我试图让消息字段和 EventID 字段上的字符串匹配混合在一起工作。 这就是我正在尝试的:
powershell "Get-WinEvent -EA SilentlyContinue -FilterHashtable @{Logname='System';ID=42}| SELECT-Object @{Label = 'TimeCreated'; Expression = {Get-Date $_.TimeCreated -Format 'yyyy-MM-dd HH:mm:ss'}},@{Label = 'DayOfWeek'; Expression = {(Get-Date $_.TimeCreated).DayOfWeek}},ID,@{l='ID Description';e={Switch ($_) { {$_.MESSAGE -Match 'Sleep Reason: Application API'}{Type='Sleep matched using Message';break} {$_.ID -eq '42'}{'Type=Sleep matched using EventID';break} }}},MESSAGE|ConvertTo-Csv -NoTypeInformation | %{ $_ -replace """`r`n""",',' } | select -Skip 1 | Out-File -Append c:\logs\timeline\TEMP_TimeLine.csv"
正如我们从第一个输出中看到的那样,消息字段显然具有字符串“睡眠原因:应用程序 API”。想知道这里发生了什么...任何线索 powershell 专家?
【问题讨论】:
标签: powershell