我正在尝试了解在PowerShell中使用的成语。
鉴于此脚本:
$path = 'hkcu:\Software\Microsoft\Windows\CurrentVersion\Extensions'
$key = Get-Item $path
$key
我在这个问题的底部得到了输出。
我想获取属性(在
$key
下的名称/值对)的输出,在这里我可以同时过滤名称和值。例如,过滤以列出所有具有以下内容的扩展:
xls*
*\MSACCESS.EXE
的值或排除过滤器:排除所有名称,例如
doc*
通过第一个过滤器,我想要这样的结果:
Name Value
---- --------
xlsx C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE
xls C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE
mdb C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE
mda C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE
这是脚本的原始输出:
Hive: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
Name Property
---- --------
Extensions rtf : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.rtf
dot : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dot
dotm : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dotm
dotx : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.dotx
docm : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.docm
docx : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.docx
doc : C:\PROGRA~2\MICROS~1\Office15\WINWORD.EXE ^.doc
xlsx : C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE
xls : C:\PROGRA~2\MICROS~1\Office15\EXCEL.EXE
mdb : C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE
mda : C:\PROGRA~2\MICROS~1\Office15\MSACCESS.EXE
编辑
我解决了部分问题:获取名称/值对的列表。它使用PSCustomObject:
$namevalues = $key.GetValueNames() | ForEach-Object { [pscustomobject]@{ Name=$_; Value=$key.GetValue($_) } }
$namevalues
(我应该如何包装该代码?)
过滤的任何帮助将不胜感激
最佳答案
有一种更聪明的方法来枚举注册表值(找到它here)。而且它是更强大的IMO。
我把它变成了单线:
(Get-ItemProperty $path).psobject.properties |
where {$_.name -like "xls*" -or $_.value -like "*\MSACCESS.EXE"} |
select name,value
更新:如@ mklement0的注释中所述,您应该注意
PSPath
中的属性PSParentPath
,PSChildName
,PSDrive
,PSProvider
和psobject.properties
。
关于powershell - 如何在PowerShell中按名称和值过滤注册表项下的名称/值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837876/