无法在组策略注册表中获取 ItemProperty

Cannot Get-ItemProperty in Group Policy registry

我需要找到一个特定的 GPO 以手动将其从我们的机器中删除,因为它们在域内和域外都是流行病,所以我考虑通过 PS 使用 Intune 远程执行此操作。

我正在尝试创建一个脚本来查找 GPO 的 DisplayName 并将其删除,但似乎属性受到保护或其他一些问题,因为我找不到任何 属性组策略注册表。

如果我尝试这样做:

Get-ChildItem -Path 'Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy\History\'

我得到类似的东西:

Name Property

---- --------

{3537}

{42B5}

{4CFB}

无论我超越那个点有多深,它都没有向我显示任何 属性。我刚开始使用 PS,我不知道我是否做错了什么,使用其他注册表我没有遇到任何问题。

¿有什么想法吗? :(

最后我想要这样的东西:

$path = "Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy\History\"
$match = "GPO_1234"
Get-ChildItem -Path $path -recurse |
                 ForEach { Get-ItemProperty $_.PSPath } |
                 Where-Object { $_.DisplayName -match $match } | del

但是如果属性不能迭代,它不能匹配任何东西。

提前致谢

如果不知道“Group Policy\History”中的确切内容(我只有一个 DWORD,仅此而已,根本没有子项),这有点困难,但假设“DisplayName”是 属性 某处并且“GPO_1234”是那个 属性 的值,那么这样的事情应该有效:

$RegPath = "Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy\History\"
$Pattern = "GPO_1234"
Get-ChildItem -Recurse $RegPath |
    ForEach-Object { Get-ItemProperty $_.PsPath } |
        Where-Object {
            $_.psobject.Properties.Name -eq 'DisplayName' -and
            $_.psobject.Properties.Value -eq $Pattern
        }

如果你得到了你想要的比赛,就在最后抛出一个决赛 | Remove-Item -Force,如果你对发生的事情有任何疑问,请尽管问!

作为旁注,您应该避免使用像 Foreachdel 这样的别名,而是使用真实的名字(即 Foreach-ObjectRemove-Item)。它将使您的脚本更易于阅读和遵循长 运行.

对于 Foreach 尤其重要,因为它的拼写完全相同,但语法也完全不同 (foreach ($Item in $Collection) {})。