给予...
HKLM\Software\
KeyName
Property_1
Property_2
Property_[0-1]
Key*Name
Property_1
Property_2
Property_[0-1]
Key@Name
Property_1
Property_2
Property_[0-1]
我可以使用
Get-Item -path:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name"
这将返回 KeyName
, Key*Name
和 Key@Name
同时
Get-Item -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name"
将返回刚刚 Key*Name
. 到目前为止,一切都很好. 我可以使用的道路或literalPath根据需要搜索的关键用通配符或者没有。 但性质构成一个问题。
Get-ItemProperty -path:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\KeyName" -name:"Prop_[0-9]"
作为预期和返回 Prop_1
& Prop_2
从 KeyName
关键。 和
Get-ItemProperty -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\KeyName" -name:"Prop_[0-9]"
作为预期和返回的只是 Prop_[0-9]
从相同的密钥。 但是这一切都失败时除了当你需要使用通配符找到的属性,在一个路径,包括通配符作为一个文本在关键路径。 所以...
Get-ItemProperty -path:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name" -name:"Prop_[0-9]"
返回 Prop_1
& Prop_2
从所有三个钥匙。 不是所期望的行为。
我曾希望能够过滤器上 PSPath
使用`literalPath'但是这
Get-ItemProperty -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name" -name:"Prop_[0-9]" | where {$_.PSPath -match [RegEx]::Escape("Key*Name")}
不返回的正确性。 它似乎是一个 -literalPath
意味着一种文字的名称。 所以我试着过滤 PSPath
和 Name
就像这样
Get-ItemProperty -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name" -name:"Prop_[0-9]" | where {(($_.PSPath -match [RegEx]::Escape("Key*Name")) -and ($_.Name -match "Prop_[0-9]"))}
但是,这并不工作,因为一旦你实际上得到实性质,他们不再是一个.净类型,它们已经被拉入 PSCustomObject
.
这开始变得这么复杂,我不知道,如果有一个更好的方式进行。 我应该注意,最终目标是获得一个文本路径和列表的文本酒店的名字,所以,我可以移动,复制或删除的性质。 因此,鉴于道路 Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name
和一个名字 Prop_[0-9]
我最终想要的,例如,删除
HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name\Prop_1
&
HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name\Prop_2
但不是
HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name\Prop_[0-9]
编辑:基于的答案,从@Tomalak我已简化了一点,简单地得到回财产清单的名字。 看起来像这样
$keyPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name"
$propExpr = "Prop_[0-9]"
((Get-Item -literalPath:$keyPath | Get-ItemProperty).PSObject.Properties | Where-Object Name -Match $propExpr | ForEach-Object {$_.Name})
Get-Item -literalPath 'HKLM:\SOFTWARE\Key*Name\' | Select-Object -ExpandProperty property | Where {$_ -match "Prop_[0-9]"}
. 现在我有一个更通用的方法。 时间的整合。 任何人都别想,使它的工作,-literalPath
应$keyPath
不$key
,$keyPath
需要开始Registry::
或HKLM:
.