【问题标题】:Command To Find Out If a HKEY_USER Path Exists查明 HKEY_USER 路径是否存在的命令
【发布时间】:2019-10-09 04:58:19
【问题描述】:

我需要一个命令来检查用户 HKEY_USERS 注册表项路径是否存在。我为静态注册表路径编写了一些代码,但我发现匹配不同机器上不同的注册表路径具有挑战性。

例如,如果路径存在,下面的 PowerShell 代码将显示 true 或 false,我需要 HKEY_USERS 唯一配置文件:

Test-Path "HKLM:\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinClientSec"

我想检查一下

HKEY_USERS\S-1-5-21-2990211406-3548698811-2423315665-500

路径存在,挑战之一是 HKEY_USERS 的值会因不同的机器而改变。我制作了以下正则表达式来匹配唯一值:

^S-1-5-21-[0-9]+-[0-9]+-[0-9]+-[0-9]{3,}

但是,正则表达式不适用于 PowerShell 上的 Test-Path 命令。有谁知道我如何使用某种带有正则表达式的 Windows 命令来制作一个命令来检查用户 HKEY_USERS 路径是否存在?

【问题讨论】:

  • 脚本是否总是在您正在检查其注册表的计算机上运行,​​还是远程运行?

标签: regex windows powershell command registry


【解决方案1】:

获取对 hive 根的引用,然后调用 GetSubKeyNames() 以查看是否有任何子键与模式匹配:

$BuiltinDomainAdministratorPattern = '^S-1-5-21-[\d\-]+-500$'

$HKU = Get-Item Registry::HKEY_USERS
if($HKU.GetSubKeyNames() -match $BuiltinDomainAdministratorPattern){
    # subkey exists
}

【讨论】:

  • 如果我正确理解了提问者,他的问题是“21”和“500”之间的内容因计算机而异,他不能使用正则表达式来匹配它,并且不一定知道任何特定计算机的价值。
  • @JeffZeitlin 你说得对,更新了答案
【解决方案2】:

或者你可以只为 HKEY_USERS 配置单元创建一个新的 PSDrive(只有 HKLM: 和 HKCU: 默认存在)

New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue

Test-Path -Path HKU:\S-1-5-21-2990211406-3548698811-2423315665-500

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2019-10-08
    • 1970-01-01
    • 2016-09-05
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多