在我的脚本中,$ queryResult.events有一个名为SourceFile的属性(所以$ queryResult.events.SourceFile),如果$ queryResult.events.event_name =“File Copy”等我试图传递这个属性。 ..我希望这些结果存储在名为$ UniqueUSBFileNames的变量中。目前,我正在尝试使用我的脚本中的以下行:
$UniqueUSBFileNames += $queryResult.events.event_name.GetEnumerator() | Where-Object {$_.name -eq "File Move" -or "File Copy" -or "Save As"}
我实际上是在尝试解析$ queryResult.events的每个元素,看看$ queryResult.events.event_name是“文件移动” - 或“文件复制” - 或“另存为”,如果是,我想将$ queryResult.events.SourceFile保存在变量$ UniqueUSBFileNames中。
我一直在这里,并且感谢任何帮助。
提前致谢。
修改 按要求添加更多代码:
$UniqueUSBFileNames = $null
$UniqueUSBFileNames += $queryResult.events.event_name.GetEnumerator() | Where-Object {$_.name -eq "File Move" -or "File Copy" -or "Save As"}
$UniqueUSBFileNames | Sort-Object -Unique | Out-File C:\Users\hubt\Documents\Scripts\tmp\$USBEvents
刚刚初始化$ UniqueUSBFileNames,看看通过管道的当前元素是否等于“文件移动” - 或“文件复制” - 或“另存为”,然后仅按唯一文件名排序(因此没有重复)并打印结果到一个文件。最后,如果$ aqlQueryResult.events.event_name等于“文件移动” - 或“文件复制” - 或“另存为”,我需要$ UniqueUSBFileNames中的每个$ queryResult.events.SourceFile。
对不起,如果这没有多大意义,请告诉我是否需要澄清。
答案 0 :(得分:2)
好的,你非常接近,所以让我们从直接回答开始吧。您正在将event_name
属性传递给管道,并希望引用其他属性。你真正想做的是将每个事件传递给管道:
$UniqueUSBFileNames += $queryResult.events | <more code>
因此,既然您已将整个事件传递下来,那么您只需在Where
语句中过滤所需的事件:
$UniqueUSBFileNames += $queryResult.events | Where-Object {$_.event_name -eq "File Move" -or $_.event_name -eq "File Copy" -or $_.event_name -eq "Save As"}
好的,现在您只有想要进入管道的事件,然后使用Select-Object
和-ExpandProperty
开关来仅捕获您正在寻找的属性的值:
$UniqueUSBFileNames += $queryResult.events | Where-Object {$_.event_name -eq "File Move" -or $_.event_name -eq "File Copy" -or $_.event_name -eq "Save As"} | Select-Object -ExpandProperty SourceFile
要缩短已经很长的内容,您可以在-in
语句中使用-eq
而不是三个不同的Where
,并使用其中某些条款的较短版本。我会做的是:
$UniqueUSBFileNames += $queryResult.events | ?{$_.event_name -in "File Move","File Copy","Save As"} |% SourceFile