ค้นหาเว็บไซต์

การทำงานกับโฟลเดอร์ไฟล์และรีจิสตรีคีย์


ตัวอย่างนี้ใช้กับแพลตฟอร์ม Windows เท่านั้น

PowerShell ใช้คำนาม รายการ เพื่ออ้างถึงรายการที่พบในไดรฟ์ PowerShell เมื่อติดต่อกับผู้ให้บริการ PowerShell FileSystem รายการ อาจเป็นไฟล์ โฟลเดอร์ หรือไดรฟ์ PowerShell การลงรายการและการทำงานกับรายการเหล่านี้เป็นงานพื้นฐานที่สำคัญในการตั้งค่าการดูแลระบบส่วนใหญ่ ดังนั้นเราจึงต้องการหารือเกี่ยวกับงานเหล่านี้โดยละเอียด

การระบุไฟล์ โฟลเดอร์ และรีจิสตรีคีย์

เนื่องจากการรับคอลเลกชันของรายการจากสถานที่ใดสถานที่หนึ่งนั้นเป็นงานทั่วไป ดังนั้น Get-ChildItem cmdlet จึงได้รับการออกแบบมาโดยเฉพาะเพื่อส่งคืนรายการทั้งหมดที่พบในคอนเทนเนอร์ เช่น โฟลเดอร์

หากคุณต้องการส่งคืนไฟล์และโฟลเดอร์ทั้งหมดที่มีอยู่โดยตรงภายในโฟลเดอร์ C:\Windows ให้พิมพ์:

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-16   8:10 AM          0 0.log
-a---        2005-11-29   3:16 PM         97 acc1.txt
-a---        2005-10-23  11:21 PM       3848 actsetup.log
...

รายการมีลักษณะคล้ายกับที่คุณจะเห็นเมื่อคุณป้อนคำสั่ง dir ใน cmd.exe หรือคำสั่ง ls ในเชลล์คำสั่ง UNIX .

คุณสามารถดำเนินการรายการที่ซับซ้อนได้โดยใช้พารามิเตอร์ของ cmdlet Get-ChildItem คุณสามารถดูไวยากรณ์ของ cmdlet Get-ChildItem ได้โดยพิมพ์:

Get-Command -Name Get-ChildItem -Syntax

พารามิเตอร์เหล่านี้สามารถผสมและจับคู่เพื่อให้ได้เอาต์พุตที่ปรับแต่งได้สูง

แสดงรายการที่มีอยู่ทั้งหมด

หากต้องการดูทั้งรายการภายในโฟลเดอร์ Windows และรายการใดๆ ที่อยู่ในโฟลเดอร์ย่อย ให้ใช้พารามิเตอร์ Recurse ของ Get-ChildItem รายการจะแสดงทุกอย่างภายในโฟลเดอร์ Windows และรายการในโฟลเดอร์ย่อย ตัวอย่างเช่น:

PS> Get-ChildItem -Path C:\WINDOWS -Recurse

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
...

การกรองรายการตามชื่อ

หากต้องการแสดงเฉพาะชื่อของรายการ ให้ใช้พารามิเตอร์ ชื่อ ของ Get-Childitem:

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

บังคับให้แสดงรายการที่ซ่อนอยู่

รายการที่ซ่อนอยู่ใน File Explorer หรือ cmd.exe จะไม่แสดงในผลลัพธ์ของคำสั่ง Get-ChildItem หากต้องการแสดงรายการที่ซ่อนอยู่ ให้ใช้พารามิเตอร์ Force ของ Get-ChildItem ตัวอย่างเช่น:

Get-ChildItem -Path C:\Windows -Force

พารามิเตอร์นี้มีชื่อว่า Force เนื่องจากคุณสามารถบังคับแทนที่การทำงานปกติของคำสั่ง Get-ChildItem ได้ บังคับ เป็นพารามิเตอร์ที่ใช้กันอย่างแพร่หลาย ซึ่งบังคับการดำเนินการที่ cmdlet จะไม่ดำเนินการตามปกติ แม้ว่าจะไม่สามารถดำเนินการใดๆ ที่กระทบต่อความปลอดภัยของระบบก็ตาม

การจับคู่ชื่อรายการด้วยไวด์การ์ด

คำสั่ง Get-ChildItem ยอมรับไวด์การ์ดในเส้นทางของรายการที่จะแสดงรายการ

เนื่องจากการจับคู่ไวด์การ์ดได้รับการจัดการโดยกลไกจัดการ PowerShell cmdlet ทั้งหมดที่ยอมรับไวด์การ์ดจึงใช้สัญลักษณ์เดียวกันและมีลักษณะการทำงานที่ตรงกันเหมือนกัน สัญลักษณ์ตัวแทนของ PowerShell ประกอบด้วย:

  • เครื่องหมายดอกจัน (*) จะจับคู่อักขระใดๆ ที่เป็นศูนย์หรือมากกว่านั้น
  • เครื่องหมายคำถาม (?) ตรงกับอักขระหนึ่งตัวเท่านั้น
  • อักขระวงเล็บปีกกาซ้าย ([) และอักขระวงเล็บปีกกาขวา (]) ล้อมรอบชุดอักขระที่จะจับคู่

ต่อไปนี้คือตัวอย่างบางส่วนของวิธีการทำงานของข้อกำหนดไวด์การ์ด

หากต้องการค้นหาไฟล์ทั้งหมดในไดเร็กทอรี Windows ที่มีส่วนต่อท้าย .log และมีอักขระห้าตัวในชื่อฐาน ให้ป้อนคำสั่งต่อไปนี้:

PS> Get-ChildItem -Path C:\Windows\?????.log

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
...
-a---        2006-05-11   6:31 PM     204276 ocgen.log
-a---        2006-05-11   6:31 PM      22365 ocmsn.log
...
-a---        2005-11-11   4:55 AM         64 setup.log
-a---        2005-12-15   2:24 PM      17719 VxSDM.log
...

หากต้องการค้นหาไฟล์ทั้งหมดที่ขึ้นต้นด้วยตัวอักษร x ในไดเร็กทอรี Windows ให้พิมพ์:

Get-ChildItem -Path C:\Windows\x*

หากต้องการค้นหาไฟล์ทั้งหมดที่มีชื่อขึ้นต้นด้วย "x" หรือ "z" ให้พิมพ์:

Get-ChildItem -Path C:\Windows\[xz]*

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไวด์การ์ด โปรดดูที่ about_Wildcards

ไม่รวมรายการ

คุณสามารถยกเว้นบางรายการได้โดยใช้พารามิเตอร์ ยกเว้น ของ Get-ChildItem ซึ่งช่วยให้คุณทำการกรองที่ซับซ้อนได้ในคำสั่งเดียว

ตัวอย่างเช่น สมมติว่าคุณกำลังพยายามค้นหา Windows Time Service DLL ในโฟลเดอร์ System32 และสิ่งที่คุณจำได้เกี่ยวกับชื่อ DLL ก็คือชื่อขึ้นต้นด้วย "W" และมี "32" อยู่ในนั้น .

นิพจน์เช่น w*32*.dll จะค้นหา DLL ทั้งหมดที่ตรงตามเงื่อนไข แต่คุณอาจต้องการกรองไฟล์เพิ่มเติมและละเว้นไฟล์ win32 ใดๆ คุณสามารถละเว้นไฟล์เหล่านี้ได้โดยใช้พารามิเตอร์ ยกเว้น ที่มีรูปแบบ win*:

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*

    Directory: C:\WINDOWS\System32

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           3/18/2019  9:43 PM         495616 w32time.dll
-a---           3/18/2019  9:44 PM          35328 w32topl.dll
-a---           1/24/2020  5:44 PM         401920 Wldap32.dll
-a---          10/10/2019  5:40 PM         442704 ws2_32.dll
-a---           3/18/2019  9:44 PM          66048 wsnmp32.dll
-a---           3/18/2019  9:44 PM          18944 wsock32.dll
-a---           3/18/2019  9:44 PM          64792 wtsapi32.dll

การผสมพารามิเตอร์ Get-ChildItem

คุณสามารถใช้พารามิเตอร์ต่างๆ ของ Get-ChildItem cmdlet ในคำสั่งเดียวกันได้ ก่อนที่คุณจะผสมพารามิเตอร์ ตรวจสอบให้แน่ใจว่าคุณเข้าใจการจับคู่ไวด์การ์ด ตัวอย่างเช่น คำสั่งต่อไปนี้ไม่ส่งคืนผลลัพธ์:

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

ไม่มีผลลัพธ์ แม้ว่าจะมี DLL สองตัวที่ขึ้นต้นด้วยตัวอักษร "z" ในโฟลเดอร์ Windows ก็ตาม

ไม่มีการส่งคืนผลลัพธ์เนื่องจากเราระบุไวด์การ์ดเป็นส่วนหนึ่งของเส้นทาง แม้ว่าคำสั่งเป็นแบบเรียกซ้ำ แต่ Get-ChildItem cmdlet จะจำกัดรายการไว้เฉพาะรายการที่อยู่ในโฟลเดอร์ Windows ที่มีชื่อลงท้ายด้วย .dll

หากต้องการระบุการค้นหาแบบเรียกซ้ำสำหรับไฟล์ที่มีชื่อตรงกับรูปแบบพิเศษ ให้ใช้พารามิเตอร์ รวม

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM       8261 zoneoc.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM     337920 zipfldr.dll

บทความที่เกี่ยวข้อง