Powershell, registra a zástupné znaky, ó môj

0

Otázka

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})
powershell registry wildcard
2021-11-16 08:27:28
1

Najlepšiu odpoveď

2

To bude mať kľúč databázy registry podľa doslovného cestu a filter jej vlastnosti regulárny výraz zápas

$keyPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name"
$propExpr = "Prop_[0-9]"

Get-Item -literalPath $keyPath -PipelineVariable key | Get-ItemProperty | ForEach-Object {
    $_.PSObject.Properties | Where-Object Name -Match $propExpr | ForEach-Object {
        [pscustomobject]@{
            key = $key.Name
            prop = $_.Name
            value = $_.Value
        }
    }
}

Namiesto $key.Name samozrejme môžete vrátiť skutočná $key ak je to výhodnejšie pre svoju úlohu.

2021-11-16 10:57:44

Práve som sa podarilo dostať niečo na práci, a to 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 $keya $keyPath je potrebné začať s Registry:: alebo HKLM:.
Gordon

@Gordon, Máte pravdu, tie boli oversights, keď som si moje testovanie kódu. Pevné.
Tomalak

Žiadne starosti. Bolo to skutočne veľmi dobré pre mňa, je potrebné naozaj pochopiť, svoj prístup, aby to fungovalo. Najlepší spôsob, ako sa učiť. :) Naozaj šťastní, že majú lepší prístup vo všeobecnosti na nakladanie s PSCustomObject ako návrat typ príliš.
Gordon

@Gordon Tam je vždy viac ako jeden spôsob, ako pomocou PowerShell.
Tomalak

VEĽMI pravdivé, že. :)
Gordon

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................