Powershell,ลงชื่อและ wildcards โอ้ของฉัน

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*Name แล้ว Key@Nameในขณะที่

Get-Item -literalPath:"Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Key*Name"

จะกลับมาแค่ Key*Name. ถึงตอนนี้ดีเลย ฉันสามารถใช้ได้-พาธหรือ-literalPath เป็นต้องการให้เหมือนกัค้นหากุญแจกับ wildcards หรือไม่ แต่คุณสมบัติสร้างปัญหา

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

แต่มันไม่ได้ผลเพราะครั้งนึงคุณคิดจริงๆเหรอว่าจะได้จริงของคุณสมบัติของพวกเขาไม่ได้เป็น.อข่ายนอกประเภทพวกเขาต้อ shat ไป 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 ฉันมีประยุกต์@item text character set หน่อยนะเพื่อนแค่กลับมาเป็นรายการทรัพย์สินของที่ชื่อ นั่นดูเหมือนนี้

$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

นี่จะได้ลงชื่อกุญแจโดยการยึดตามตัวอักษรแบบนั้นทางและตัวกรองของมันคุณสมบัติโดย regex ตรงกัน

$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]"}. ตอนนี้ฉันมีอีกเรื่องทั่วๆไปที่ทำตามใจใกล้เข้ามาแล้ว เวลา integrate. สำหรับคนอื่นต้องการจะทำให้มันทำงาน -literalPath ควรจะเป็น $keyPath ไม่ $keyแล้ว $keyPath ต้องการจะเริ่มด้วย Registry:: หรือ HKLM:.
Gordon

@กอร์ดอนคุณพูดถูกพวกนั้นเป็ oversights ตอนที่ฉันแปลของฉันการทดสอบรหัส ซ่อมแล้ว
Tomalak

ไม่ต้องห่วง มันเป็นความจริงที่มันดีจริงๆสำหรับฉันที่จะต้องจริงๆเข้าใจวิธีการของคุณเพื่อทำให้มันทำงานแล้ว ทางที่ดีที่สุดที่จะเรียนรู้ :)มีความสุขที่จะมีวิธีทั่วไปก็ลำบากพอสำหรับจัดการกับ PSCustomObject เป็นคืนประเภทเหมือนกัน
Gordon

@กอร์ดอนมีอยู่เสมอมากกว่าทางเดียวกับ PowerShell.
Tomalak

มากเรื่องจริงนั้น :)
Gordon

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่