似乎无法匹配注册表中的两个值

时间:2015-05-04 16:25:27

标签: powershell registry

我正在尝试获取系统上的所有NIC,然后使用该信息插入*TCPChecksumOffloadIPv4等注册表值。但是,我正在失败这项任务!

我可以获取所有GUID,并希望将其与此注册表路径中的内容相匹配:HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\*

我得到了所有的GUID:

$GuidSet = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\*" | select -ExpandProperty pschildname

输出:

{1FE01120-3866-437F-81FF-556B08999AA4}
{2533855F-2A59-485D-87A0-167E5DA39E45}
{2A6471FB-C1D6-47D2-A665-9F276D142D7C}
{306D2DED-18B5-45D8-858E-BB3F49E3BD6A}
{30EF50B2-E4B3-400D-9614-B590E37DE4D8}
{4A208C06-0D99-4DE4-9B2F-86285AEF864E}
{B7883140-E15B-4409-BA1B-96E37A45425C}
{D129DDA8-C64B-46A1-B99A-EA74FC4FAF81}
{D5C9183B-E542-4010-866F-4443AD55F28C}

这就是我现在被困住的地方......我如何使用此信息来匹配"HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\*"的注册表路径中的内容?

我尝试了以下但我拒绝访问 - 我认为这是因为"属性"注册表项 - 如何忽略该注册表项?

     $path1 = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\*" |?{$_.NetCfgInstanceId -match $guidset} | select -ExpandProperty pspath

一旦完成,我会在每个条目上构建一个foreach循环,然后添加我需要的注册表项吗?

解答:

你知道吗...当你陷入混乱并且你有很多脚本时...休息一下,打开一个新窗口,从刮擦开始!这就是我的所作所为,并在10分钟内我明白了......!

$aGUID_SET = @(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\*" | select -ExpandProperty pschildname)

Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\*" -exclude "Properties" | 
    Where-Object {$aGUID_SET.Contains($_.NetCfgInstanceId)} | 
        ForEach-Object {
            ""
            $_.DriverDesc
            $_.NetCfgInstanceId
        }

2 个答案:

答案 0 :(得分:1)

你可以这样做

ForEach ($item in $(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\*" |?{$_.NetCfgInstanceId -match $guidset} | select -ExpandProperty pspath)) {

    Try {
       Write-Host $item
    } Catch {
       Write-Host "error..."
    }
}

答案 1 :(得分:1)

你走在正确的轨道上。

HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318} cmdlet只会获取指定项目的属性,不包括任何子项目。

由于您要查找的注册表值实际上不是注册表项$path = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}"的属性,而是该项的子项的属性,我们首先要做的是列出子项:{{1} }

然后我们可以使用Get-ChildItem $path列出子项。

正确格式化路径后(将Registry ::添加到前面),然后可以将其输入Get-ItemProperty。我会过滤类似:Where-Object {$guidset -contains $_.NetcfgInstanceID} | Select-Object -ExpandProperty PSPath的内容。

最后,您应该有一组与$guidset匹配的键的路径 Set-ItemProperty可以。

编辑:您收到的错误是因为对这些"属性"的权限。子键是受限制的。我会将-ErrorAction SilentlyContinue添加到Get-ChildItem,因为它不是终止错误,并且实际上不会影响结果。