Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Collections 是否可以向powershell中的集合添加属性?_Collections_Powershell_Properties - Fatal编程技术网

Collections 是否可以向powershell中的集合添加属性?

Collections 是否可以向powershell中的集合添加属性?,collections,powershell,properties,Collections,Powershell,Properties,我有一个非常大的对象数组,由一个普通的Get-ChildItem获得,我需要能够通过各种不同的属性对它们进行索引。我已经创建了一组哈希表,通过这些属性对它们进行索引,但现在它只是一组集合,必须单独构建和管理。有一次,我突然想到,只要将哈希表作为“ByPath”“ByGuid”等属性添加到基本集合中就好了。构建哈希表的代码只需将我已有的各个语句组合在一起: $items = Get-ChildItem -recurse blahblah $items | Add-Member -membertyp

我有一个非常大的对象数组,由一个普通的Get-ChildItem获得,我需要能够通过各种不同的属性对它们进行索引。我已经创建了一组哈希表,通过这些属性对它们进行索引,但现在它只是一组集合,必须单独构建和管理。有一次,我突然想到,只要将哈希表作为“ByPath”“ByGuid”等属性添加到基本集合中就好了。构建哈希表的代码只需将我已有的各个语句组合在一起:

$items = Get-ChildItem -recurse blahblah
$items | Add-Member -membertype NoteProperty -name "ByGuid" -value (Get-ItemsByGuid)
$items | Add-Member -memberType NoteProperty -name "ByPath" -value (Get-ItemsByPath)
$items
不幸的是,虽然这不会影响执行,但却没有任何作用。属性存在,并且在Get成员中可见,但在询问时它们始终为null,在随后设置时它们始终为throw

在此对象上找不到属性“ByGuid”;确保它存在并且可设置。 第1行字符:14
+$items 是的,这是可能的,而且你在正确的轨道上。请记住,管道枚举集合(包括数组)。您需要考虑该枚举,否则会将属性添加到数组中的每个项,而不是数组本身。您可以使用逗号运算符解决此枚举问题,如下所示:

$items = ,$items | Add-Member NoteProperty ByGuid (Get-ItemsByGuid) -PassThru
$items = ,$items | Add-Member NoteProperty ByPath (Get-ItemsByPath) -PassThru
请注意,如果要使用
Get Member
检查$items数组上的成员,则需要使用相同的技巧:

,$items | Get-Member

操作符只是将目标包装到另一个数组中,其中目标是唯一的元素。当管道枚举这个新数组时,我们将原始数组作为管道中的唯一输出。

Keith,你是我的英雄。我觉得我现在欠你六块钱什么的。从一开始,我就对包装/拆开包装的事情感到不安,尤其是像这样的箱子。我曾设想Add Member是一种引用类型的操作,而不是值类型的操作,而且似乎逗号运算符与-PassThru和赋值组合在一起都是必要的……我自己几乎没有机会做到这一点。非常感谢!没问题。这是PowerShell在大多数情况下做正确事情的领域之一,即自动枚举很好。然而,正如你所发现的,有时候你不想要它。尽管如何避免枚举并不明显,但至少很容易做到。:-)您还可以使用“添加成员-InputObject$items…”