我正在尝试获取系统上的所有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
}
答案 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
,因为它不是终止错误,并且实际上不会影响结果。