Vzhľadom...
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]
Môžem použiť
Get-Item -path:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name"
čo vráti KeyName
, Key*Name
a Key@Name
, zatiaľ čo
Get-Item -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name"
vráti len Key*Name
. Tak ďaleko, tak dobre. Môžem použiť cesta-alebo -literalPath podľa potreby buď hľadať kľúč s zástupné znaky, alebo nie. Ale vlastnosti predstavovať problém.
Get-ItemProperty -path:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\KeyName" -name:"Prop_[0-9]"
funguje tak, ako sa očakáva a vráti Prop_1
& Prop_2
z KeyName
kľúčové. A
Get-ItemProperty -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\KeyName" -name:"Prop_[0-9]"
funguje tak, ako sa očakáva a vráti len Prop_[0-9]
z rovnakého kľúča. Ale to všetko zlyhá od seba, keď budete musieť použiť zástupné nájsť vlastnosti, v cestu, ktorá zahŕňa zástupný znak ako doslovný v kľúčových cestu. Takže...
Get-ItemProperty -path:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name" -name:"Prop_[0-9]"
vráti Prop_1
& Prop_2
zo všetkých troch tlačidiel. Nie je požadované správanie na všetkých.
Dúfal som, že bude schopný filtrovať na PSPath
pomocou -`literalPath", ale to
Get-ItemProperty -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name" -name:"Prop_[0-9]" | where {$_.PSPath -match [RegEx]::Escape("Key*Name")}
nevráti správne vlastnosti. Zdá sa, že -literalPath
je doslovný názov tiež. A tak som sa snažil na filtrovanie PSPath
a Name
tak ako
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]"))}
Ale to nefunguje, pretože keď ste skutočne dostať nehnuteľností, oni sú už .ČISTÝ typ, boli shat do PSCustomObject
.
A to je začína byť tak zložité zaujímalo by ma, či existuje lepší spôsob, ako postupovať. Mal by som poznamenať, že konečným cieľom je dostať obe doslovný cestu a zoznam doslovný majetku mená, aby som mohol presunúť, kopírovať alebo odstrániť vlastnosti. Takže, vzhľadom na ceste Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name
a meno Prop_[0-9]
Som sa nakoniec chcete napríklad vymazať
HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name\Prop_1
&
HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name\Prop_2
ale nie
HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name\Prop_[0-9]
EDIT: na základe odpoveď od @Tomalak som zjednodušené trochu, jednoducho dostať späť na zoznam nehnuteľností mená. Vyzerá to
$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]"}
. Teraz mám viac univerzálny prístup. Čas na integráciu. Niekto chce, aby to fungovalo,-literalPath
by mal byť$keyPath
nie$key
a$keyPath
je potrebné začať sRegistry::
aleboHKLM:
.