在哈希表中向对象添加对象

时间:2017-04-23 19:23:28

标签: arrays powershell object hashtable

我想创建一个Hashtable,它在数组中对具有相同名称的文件进行分组,以便稍后我可以使用这些文件列出这些文件的某些属性,例如存储它们的文件夹。

$ht = @{}
gci -recurse -file | % {
    try{
        $ht.Add($_.Name,@())
        $ht[$_.Name] += $_
    }
    catch{
        $ht[$_.Name] += $_
    }
}

我得到的只是:

Index operation failed; the array index evaluated to null.
At line:8 char:13
+             $ht[$_.Name] += $_
+             ~~~~~~~~~~~~~~~~~~

我不确定为什么这不起作用,我很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

不要重新发明方向盘。您希望分组具有相同名称的文件,请使用testarray cmdlet:

Group-Object

现在,您可以使用$groupedFiles = Get-ChildItem -recurse -file | Group-Object Name cmdlet轻松检索至少存在两次的所有文件名:

Where-Object

您收到此错误,因为如果您的代码到达$groupedFiles | Where-Object Count -gt 1 块,则当前管道变量(catch)代表上一个错误当前项目。您可以通过将当前项存储为变量或使用$_高级cmdlet参数来解决此问题:

-PipelineVariable