Powershell正则表达匹配开始

时间:2014-04-29 21:20:19

标签: regex powershell registry caret

我试图让所有注册表项以数字1-9开头。这就是我正在使用的:

Get-ChildItem -Path HKLM:\SOFTWARE\Policies\Citrix | Where-Object {$_.name -Match '^[1-9]'}

简单吧?应该管用?不行!我错过了什么?

UPDATE1:

$CitrixPolRegDel = (Get-ChildItem -Path $CitrixPolRegPath).pschildName | Where-Object {$_ -Match '^[0-9]{1,2}$'}

这就是我现在使用的,pschildname比下面给出的拆分示例更容易使用,但是我不知道这个方法可能有缺点吗?

我还更新了regex表达式以匹配以一位或两位数命名的regkeys:

正则表达式检索名称以(^)数字0-9([0-9])开头的regkeys,名称中的数字可以出现一到两次({1,2})和然后名称应该结束($

1 个答案:

答案 0 :(得分:1)

所以,有趣的是你运行那个GCI并且用一个子键的名称来踢回一个表,但是如果你做一个Select -Expand Name它会给出完整的HKLM \软件\策略\思杰。因此存在问题,名称实际上包含密钥的全名,而不仅仅是最后一个子密钥。

那么,你想要以1-9开头的子键吗?将其拆分为\,并为每个条目使用最后一个。试试这个:

(Get-ChildItem -Path HKLM:\SOFTWARE\Policies\Citrix).Name | ForEach {$_.Split("\")[4] | Where-Object {$_.name -Match '^[1-9]'}}