gpt4 book ai didi

powershell - 单个 HashtBable 上的 For-Each 聚合返回一个 HashTable[] 数组

转载 作者:行者123 更新时间:2023-12-03 23:44:29 25 4
gpt4 key购买 nike

我想扫描 src/所有目录 .pdb文件,但按名称对其进行重复数据删除(因为同名文件可能在不同子目录中出现多次)。我认为这样的事情会做到这一点。

$x = ls .\src\ -Recurse -Include *.pdb | 
% { $a[$_.Name] = $_; $a } -Begin { $a = @{} }

它确实有点令人惊讶 $x.GetType()Object[]不是 Hashtable .相反, Object[] 中的每个项目数组似乎是 Hashtable .

我真的不明白为什么会这样,似乎是 $x应该是 Hashtable

最佳答案

发生这种情况是因为您正在回传 $a每个文件一次。 ForEach-Object循环有 3 个部分,-Begin , -Process , 和 -End . -Begin-End零件发生一次,并且 -Process scriptblock 为传递给它的每个项目发生一次。

你需要做的是移动到你经过的地方$a来自 -Process阻止到 -End堵塞。这样你就可以在 -Begin 中创建空的哈希表,您将其填充到 -Process ,然后——一旦你把所有东西都放在里面——你把它传递给 -End .

$x = ls .\src\ -Recurse -Include *.pdb | 
% -Begin { $a = @{} } -Process { $a[$_.Name] = $_ } -End { $a }

关于powershell - 单个 HashtBable 上的 For-Each 聚合返回一个 HashTable[] 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com