我在这里查了几个答案,发现这似乎是一个常见的问题,但没有一个建议对我有用。
当我这样做时
Get-ChildItem "Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\"
它返回预期的内容,该注册表位置中的所有注册表项(" thingys")的列表("注册表文件夹thingie"),即我机器中的网络适配器(包括隐藏的)。
现在我想不仅仅将所有内容转储到输出中,只需将每个密钥的DriverDesc
值转储,即"英特尔(R)双频无线-AC 7265"和一些奇怪的"微软ISATAP适配器"名字也是。
将此命令流水线化为ForEach-Object Get-ItemProperty派对似乎是理想的解决方案,但是当我尝试时,我得到一个奇怪的错误:
Get-ChildItem "Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\" | ForEach-Object {Get-ItemProperty $_.Name}
错误:
Get-ItemProperty : Cannot find path 'C:\Users\Folder\Powershell\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0000' because it does not exist.
At line:1 char:155
管道doohickey似乎将我当前的工作目录与HKLM注册表路径连接起来并尝试访问该注册表项,这当然不存在。
为了确保piplining不是很奇怪,我试着写下这些名字:
Get-ChildItem "Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\" | ForEach-Object {Write-Host $_.Name}
结果是我的预期:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0001
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0002
但问题似乎是路径提供程序在管道方中被丢弃而Get-ItemProperty没有处理它。
答案 0 :(得分:1)
现在,我发现要获得我想要的东西,我需要再次将路径提供程序Microsoft.PowerShell.Core\Registry::
附加到管道方输出,然后处理结果。
Get-ChildItem "Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\" | ForEach-Object {Get-ItemProperty "Microsoft.PowerShell.Core\Registry::$_"}
提供正确的输出,但我想只显示DriverDesc,我可以按如下方式进行操作
Get-ChildItem "Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\" | ForEach-Object {$(Get-ItemProperty "Microsoft.PowerShell.Core\Registry::$_" -Name DriverDesc).DriverDesc}
输出,如我所愿:
Intel(R) Ethernet Connection I217-LM
Microsoft Kernel Debug Network Adapter
Microsoft ISATAP Adapter
我还发现我可以使用$ _。pspath
Get-ChildItem "Microsoft.PowerShell.Core\Registry::HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\" | ForEach-Object {$(Get-ItemProperty $_.pspath -Name DriverDesc).DriverDesc}