Powershell 不允许使用空管道元素,请获取WinEvent-FilterHashtable

Powershell 不允许使用空管道元素,请获取WinEvent-FilterHashtable,powershell,Powershell,我是Powershell(v5)新手,但在web上发现了一种列出所有非空日志的方法,例如在过去30分钟内。 但是,我无法将输出重定向到文件。 感谢您的建议 $time1 = New-TimeSpan -Minutes 30 $logs = Get-WinEvent -ListLog * | Where-Object {$_.RecordCount} | Select-Object -ExpandProperty LogName Get-WinEvent -FilterHashtable @{L

我是Powershell(v5)新手,但在web上发现了一种列出所有非空日志的方法,例如在过去30分钟内。 但是,我无法将输出重定向到文件。 感谢您的建议

$time1 = New-TimeSpan -Minutes 30
$logs = Get-WinEvent -ListLog * | Where-Object {$_.RecordCount} | 
Select-Object -ExpandProperty LogName
Get-WinEvent -FilterHashtable @{LogName=$logs; Level=1,2,3; StartTime=(Get-Date)-$time1}
| out-file c:\temp\test1.txt

有两种方法可以使PowerShell在下一行中查找管道的延续:

  • |
    放在一行的末尾

    • 更一般地说:任何总是需要更多标记才能在语法上有效的语句都会导致PowerShell在下一行继续解析

    • 更新:在PowerShell[Core]v7+中,您可以选择将
      |
      放在下一行的开头

  • 通过将
    `
    (PowerShell的转义字符)放在行的最末尾(后面甚至不允许空白),使用显式的行继续符


您尝试的内容:

更新:如上所述,您的命令现在在PowerShell[Core]v7+中工作。
因此,以下解释仅适用于PowerShell 6.x及以下版本,包括Windows PowerShell

PowerShell将以下内容解读为两条语句:

Get-WinEvent -FilterHashtable @{LogName=$logs; Level=1,2,3; StartTime=(Get-Date)-$time1}
| out-file c:\temp\test1.txt
Get WinEvent
行本身在语法上是完整的,因此PowerShell将其视为自己的语句

因此,对于PowerShell,下一条语句以
|
开头,提示您看到的错误消息(在语句的第一条
|
之前必须有一个命令或表达式)