Powershell,레지스트리와 와일드카드,내 아

0

질문

다.

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*NameKey@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_2KeyName 키입니다. 고

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 즉 이름도. 그래서 나터링 PSPathName

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]"))}

그러나지 않기 때문에 작동하면 당신은 실제로는 진짜 속성이,그들은 더 이상.NET 유형,그들은 끄집어 냈 냐 하로 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})
powershell registry wildcard
2021-11-16 08:27:28
1

최고의 응답

2

이 레지스트리 키에 의해 리터럴 경로 및 필터의 속성에 의해 일치 정규식

$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
        }
    }
}

$key.Name 할 수 있습니다 물론 실제 반환 $key 더 편리한 경우의 작업입니다.

2021-11-16 10:57:44

나는 그 무언가를 얻을 작동하는,즉 Get-Item -literalPath 'HKLM:\SOFTWARE\Key*Name\' | Select-Object -ExpandProperty property | Where {$_ -match "Prop_[0-9]"}. 지금 내가 좀 더 일반적 목적의 접근 방식이다. 시 통합할 수 있습니다. 다른 사람을 위해 원하는 작동하려면, -literalPath$keyPath$key$keyPath 필요 시작 Registry::HKLM:.
Gordon

@고든 당신이 바로 그 때 나는 감독 번역 테스트 코드입니다. 수정했습니다.
Tomalak

아무 걱정하지 않습니다. 그것은 정말 좋은 나를 위해 필요 정말로 이해하고 접근하게 작동합니다. 배울 수있는 가장 좋은 방법입니다. :)정말 행복을 더 나은 방법에 대한 일반적인 처리 PSCustomObject 로 반환을 입력 too.
Gordon

@Gordon 항상 있는 하나 이상의 방법으로 PowerShell.
Tomalak

매우 true,니다. :)
Gordon

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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