Powershell,注册表和通配符

时间:2018-02-13 10:50:34

标签: powershell registry wildcard

我在这里遇到两个问题。 1:使用Get-ChildItem获取密钥时的通配符。 鉴于此代码

$registryPath = 'HKLM:\SOFTWARE\Test_Tasks\Assets\Delete_Ex\New*'
$keys = Get-ChildItem -path:$registryPath

新密钥 New.Key & 新* 我得到了意想不到的结果,因为Get-ChildItem使用*作为通配符,但*也是注册表路径中的有效字符。这看起来很有问题。我假设我唯一真正的选择是使用-literalPath而不是-path来禁用通配符?编辑:不,当我使用-literalPath时,它甚至找不到 New * 键。越野车McBuggerson?我在Windows 7上使用PSv5,这是值得的。

2:使用Get-ItemProperty获取属性时的通配符。 鉴于此代码

$registryPath = 'HKLM:\SOFTWARE\Test_Tasks\Assets\Delete_Ex\New*'
$properties = Get-ItemProperties -path:$registryPath

新值 New.Value 的属性名称 我根本无法使用通配符。

老实说,我担心在注册表操作中允许使用通配符有点危险,但我想了解如何让它与键和属性一起使用,以防我真正需要在某些时候。

1 个答案:

答案 0 :(得分:1)

解决方案

$registryPath = 'HKLM:\SOFTWARE\Test_Tasks\Assets\Delete_Ex\New[*]'
$keys = Get-ChildItem -path:$registryPath

示例代码

$keys = "Key", "New Key", "New.Key", "New*"

Write-Host "--LIKE--"
$keys -like "`*"

Write-Host "--MATCH--"
$keys -match "\*"

Write-Host "--RE-MATCH--"
$keys -like "*[*]*"

结果

--LIKE--
Key
New Key
New.Key
New*

--MATCH--
New*

--RE-MATCH--
New*

解释

第一个例子是像文字一样对待星号;它被解释为-like "*"(即匹配任何东西!)

第二个使用匹配运算符更多地工作“regex-y”(那是 defintely 一个词,诚实)。

最后一个仍然使用,但通过将其包装在方括号中,我们正在搜索包含星号字符的任何内容

about_Wildcards 帮助页

上提供了更多信息