无法在组策略注册表中获取 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
,如果你对发生的事情有任何疑问,请尽管问!
作为旁注,您应该避免使用像 Foreach
和 del
这样的别名,而是使用真实的名字(即 Foreach-Object
和 Remove-Item
)。它将使您的脚本更易于阅读和遵循长 运行.
对于 Foreach
尤其重要,因为它的拼写完全相同,但语法也完全不同 (foreach ($Item in $Collection) {}
)。
我需要找到一个特定的 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
,如果你对发生的事情有任何疑问,请尽管问!
作为旁注,您应该避免使用像 Foreach
和 del
这样的别名,而是使用真实的名字(即 Foreach-Object
和 Remove-Item
)。它将使您的脚本更易于阅读和遵循长 运行.
对于 Foreach
尤其重要,因为它的拼写完全相同,但语法也完全不同 (foreach ($Item in $Collection) {}
)。