如何在PowerShell的.Where()方法中使用变量存储的闭包
PowerShell 优化Autodesk卸载键筛选:.Where()方法闭包变量展开问题
问题说明
我有一个从注册表卸载键派生的哈希表泛型列表$rawUninstallKeys,每个列表成员是包含指定键的有序字典(结构示例见下文)。由于Autodesk的卸载键存在重复数据且仅一个有效,需要通过多条件筛选出正确的卸载字符串。当前用foreach循环实现的效率极低,计划改用.Where()方法借助.NET优化性能,但遇到了问题:无法将闭包存入变量后让$_正确展开。闭包的应用场景包括检查属性是否存在、不存在,或属性值匹配(含通配符),尝试用ExpandString的方式解决但无效。
有序字典结构示例
[Ordered]@{ displayName = 'DisplayName' displayVersion = 'DisplayVersion' installSource = 'InstallSource' publisher = 'Publisher' quietUninstallString = 'QuietUninstallString' uninstallParam = 'UninstallParam' uninstallPath = 'UninstallPath' uninstallString = 'UninstallString' installDate = 'InstallDate' keyID = '$keyID' keyName = '$keyName' keyGUID = '$keyGUID' keyPath = '$keyPath' architecture = '$architecture' }
.Where()方法有效用法示例
$rawUninstallKeys.Where({$_.publisher -like "Autodesk*"})
无效的尝试写法
.Where({$($ExecutionContext.InvokeCommand.ExpandString($closure))})
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

