我想创建一个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] += $_
+ ~~~~~~~~~~~~~~~~~~
我不确定为什么这不起作用,我很感激任何帮助。
答案 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