ให้...
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})
Get-Item -literalPath 'HKLM:\SOFTWARE\Key*Name\' | Select-Object -ExpandProperty property | Where {$_ -match "Prop_[0-9]"}
. ตอนนี้ฉันมีอีกเรื่องทั่วๆไปที่ทำตามใจใกล้เข้ามาแล้ว เวลา integrate. สำหรับคนอื่นต้องการจะทำให้มันทำงาน-literalPath
ควรจะเป็น$keyPath
ไม่$key
แล้ว$keyPath
ต้องการจะเริ่มด้วยRegistry::
หรือHKLM:
.