将对象的属性分配给变量

时间:2016-09-06 17:27:34

标签: powershell

在我的脚本中,$ 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。

对不起,如果这没有多大意义,请告诉我是否需要澄清。

1 个答案:

答案 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