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

PowerShell สำหรับผู้เริ่มต้น (ตอนที่ 11): สนุกกับ PowerShell Drives


ครั้งล่าสุดที่เรากรองวัตถุด้วยวิธีกรองและด้วย Where-Object ในส่วนนี้ผมอยากจะกลับไปสู่พื้นฐานเพื่อกลับไปสู่สิ่งที่เรายังไม่เคยเรียนรู้มาก่อน สิ่งที่ฉันกำลังพูดถึงคือการทำงานกับ PowerShell Drives แต่ก่อนอื่นเรามาดูแบบฝึกหัดจากส่วนสุดท้ายกันก่อน

สามารถดูทุกส่วนของซีรีส์ได้ที่นี่: PowerShell สำหรับผู้เริ่มต้น (ซีรีส์)

ทบทวน (ตอนที่ 10)

บัดนี้ผมจะเสนอแนวทางแก้ไขจากแบบฝึกหัดส่วนที่ 10

โดยที่-Object:

ใช้ Get-Service และ Where-Object เพื่อแสดงเฉพาะบริการที่กำลังทำงานอยู่

ตัวกรอง (ต้องใช้ Active Directory):

ใช้พารามิเตอร์ตัวกรองเพื่อรับผู้ใช้ทั้งหมดที่ถูกปิดใช้งาน

ตกลง. เรามีการให้ที่เราควรใช้ Get-Service และ Where-Object เพื่อแสดงเฉพาะบริการที่กำลังทำงานอยู่ จำวิธี 2 ขั้นตอนจาก PowerShell สำหรับผู้เริ่มต้น (ตอนที่ 8): พลังของ PowerShell - การติดต่อกับออบเจ็กต์ (Get-Member, Select-Object): แต่ที่นี่จะแตกต่างออกไปเล็กน้อย: เราใช้ Get-Member แต่ ถ้าอย่างนั้นเราจะไม่ใช้ Select-Object แต่ใช้ Where-Object


Get-Service | Get-Member

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


Get-Service | Where-Object {$_.Status -eq 'Running'}

หรือย่อให้สั้นลงเล็กน้อย:


Get-Service | Where-Object Status -EQ 'Running'

แบบฝึกหัดที่สองขอให้กรองผู้ใช้ Active Directory ที่ถูกปิดใช้งาน นี่เป็นเรื่องยุ่งยากเล็กน้อย แต่คุณพบอย่างแน่นอน (Get-ADUser xxx | Get-Member) ว่าไม่มีแอตทริบิวต์ที่ปิดใช้งาน แต่เป็นแอตทริบิวต์ที่เปิดใช้งาน


Get-ADUser -Filter {enabled -eq 'False'}

ทบทวนส่วนที่ 10


การกรองเป็นเทคโนโลยีหลักใน PowerShell หากคุณกำลังทำงานกับตัวกรอง โปรดดูส่วนวิธีใช้ก่อน โดยที่ Object จะอยู่ทางด้านขวาของท่อเสมอ กรองด้านซ้าย. หากคุณมีตัวเลือกระหว่างตัวกรองทางด้านซ้ายของท่อหรือตำแหน่งวัตถุทางด้านขวา ให้เลือกด้านซ้าย


ไดรฟ์ PowerShell

PowerShell Drives คืออะไรและมีไว้เพื่ออะไร?

ไดรฟ์ Windows PowerShell คือตำแหน่งที่เก็บข้อมูลที่คุณสามารถเข้าถึงได้เหมือนกับไดรฟ์ระบบไฟล์ใน Windows PowerShell

https://docs.microsoft.com/en-us/powershell/scripting/getting-started/cookbooks/managing-windows-powershell-drives?view=powershell-6

เป็นที่ตั้งร้าน มันอยู่ที่ไหน? นี่คือไดรฟ์ที่เรากำลังพูดถึง:


Get-PSDrive

หน้าจอของคุณอาจแตกต่างจากของฉัน คำสั่งถูกดำเนินการบน Windows Server 2016 ซึ่งทำหน้าที่เป็นตัวควบคุมโดเมนสำหรับโดเมนของฉัน นั่นเป็นเหตุผลที่เราเห็นไดรฟ์ AD (Active Directory)

ภาพรวม PS Drive ฉบับย่อ:

  • โฆษณา: Active Directory
  • นามแฝง: นามแฝงในตัว (ตัวอย่าง: Get-ChildItem ==> ls)
  • ซี: ขับซี
  • ใบรับรอง: ร้านค้าที่ตั้งใบรับรอง
  • D: ไดรฟ์ D ของฉัน
  • Env: ตัวแปรสภาพแวดล้อม (ตัวอย่าง: $env:ชื่อคอมพิวเตอร์)
  • ฟังก์ชัน: ฟังก์ชัน PowerShell เป็นการบล็อกโค้ด
  • HKCU, HKLM: สำนักทะเบียน
  • ตัวแปร
  • WSMan: ระยะไกลของ PowerShell

นั่นเป็นทฤษฎีมากมาย เกือบจะมากเกินไปสำหรับการเริ่มต้น เรามาเลือกไดรฟ์และดูให้ละเอียดยิ่งขึ้น e. ก. นามแฝงไดรฟ์


cd Alias:

มีอะไรอยู่ในไดรฟ์นี้?

เรารู้คำสั่งที่มีเส้นขอบสีแดงแล้ว

ดังนั้นสิ่งที่เรารู้ตอนนี้คือเราสามารถใช้นามแฝงได้และนามแฝงเหล่านี้ทั้งหมดจะถูกจัดเก็บไว้ในไดรฟ์ การทดสอบหนึ่งครั้ง:

แต่มันมีไว้เพื่ออะไร? ข้อดีของการบันทึกนามแฝง ใบรับรอง และรีจิสทรีในไดรฟ์คืออะไร ก่อนอื่นฉันต้องบอกว่าสิ่งนี้มีประโยชน์มากกว่าสำหรับการเขียนสคริปต์และนักพัฒนา แต่ฉันจะยกตัวอย่าง 2 ตัวอย่างที่ฉันคิดว่ามีประโยชน์มาก

เราได้เรียนรู้อะไรบ้างจนถึงตอนนี้?


ไดรฟ์ Windows PowerShell คือตำแหน่งที่เก็บข้อมูลที่คุณสามารถเข้าถึงได้เหมือนกับไดรฟ์ระบบไฟล์ใน Windows PowerShell ใช้ Get-PSDrive เพื่อแสดงไดรฟ์ทั้งหมดที่เรียกว่าผู้ให้บริการ


มีไว้เพื่ออะไร?

ตัวอย่างที่ 1 - ทำบางอย่างกับรีจิสทรี

เปิดใช้งานเดสก์ท็อประยะไกลหรือไม่ โปรดจำไว้ว่าการตั้งค่าเดสก์ท็อประยะไกล เช่นเดียวกับการตั้งค่า Windows เกือบทั้งหมดจะอยู่ในรีจิสทรีของ Windows เราสามารถเรียกดูรีจิสทรีด้วย PowerShell Drives (แน่นอนว่าเราไม่สามารถเข้าถึง SAM ที่เก็บรหัสผ่านได้):


cd hklm:

dir

ในตัวอย่างนี้ ฉันตรวจสอบว่า Remote Desktop เปิดใช้งานอยู่หรือไม่ (0=enabled):


Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-Name "fDenyTSConnections"

ตอนนี้ฉันจะแสดงให้คุณเห็นว่าคุณทำอะไรได้บ้างหากคุณได้เลื่อนขั้นเป็นผู้ใช้ PowerShell ขั้นสูง ด้วยคำสั่งนี้ ฉันจะเปิดใช้งาน Remote Desktop เซิร์ฟเวอร์ Windows ทั้งหมดของโดเมน Active Directory ของฉัน:

รับรายชื่อเซิร์ฟเวอร์ทั้งหมดและจัดเก็บไว้ในไฟล์:


(Get-ADComputer -Filter 'operatingsystem -like "*server*"').Name | Out-File C:\Temp\Servers.txt

จากนั้น ฉันดำเนินการระยะไกลเพื่อเปิดใช้งานเดสก์ท็อประยะไกลกับเซิร์ฟเวอร์ Windows ทั้งหมดที่เปิดอยู่ และฉันใช้ HKLM PowerShell Drive:


Get-Content C:\Temp\Servers.txt | ForEach-Object {Invoke-Command -ComputerName $_ {Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-Name "fDenyTSConnections" -Value 0;Enable-NetFirewallRule -DisplayGroup "Remote Desktop"}}

ทำได้ดีนี่.

ตัวอย่างที่ 2 - ค้นหาบางสิ่งบางอย่าง

มันอยู่ที่นั่นเหรอ? หรือว่ามันไม่อยู่ที่นั่น? โดยใช้ไดรฟ์ PowerShell คุณสามารถทดสอบได้ว่ามีอะไรอยู่หรือไม่

มีนามแฝง ls หรือไม่?


Test-Path alias:ls

ใช่แล้ว.

อีกตัวอย่างหนึ่งแสดงให้คุณเห็นว่ามีใบรับรองจาก DigiCert ติดตั้งอยู่ในคอมพิวเตอร์ของคุณหรือไม่ เรากำลังมองหาใบรับรอง 2 ใบนี้:


certmgr.msc

ในการทำเช่นนั้น เราต้องนำทางไปยังไดรฟ์ใบรับรองของผู้ใช้และไปยังโฟลเดอร์รูท (Trusted Root Authorities)


cd cert:

cd currentuser

cd root

และตอนนี้เราเรียกใบรับรองทั้งสองใบ:


Get-ChildItem | ? Subject -like '*DigiCert*'

จำไว้ "?" เป็นนามแฝงสำหรับ Where-Object:


Get-Alias -Definition Where-Object

นี่เป็นเวอร์ชันสั้นกว่าที่แสดงด้านบน:


Get-ChildItem Cert:\CurrentUser\Root\ | ? Subject -like '*DigiCert*'

การสร้างไดรฟ์ PowerShell (หมายเหตุด้านข้าง)

ความยืดหยุ่นของ PS Drives ปรากฏชัดในการสร้างไดรฟ์ใหม่


New-PSDrive -Name Data -PSProvider FileSystem -Root C:\Temp\Important\Data

ซึ่งช่วยให้คุณเข้าถึงไดเร็กทอรีย่อยได้โดยตรงผ่าน PowerShell Drive:


cd data:

ดังที่แสดงไว้ด้านบน ฉันใช้ PSProvider FileSystem แต่มีมากกว่านั้น


Get-PSProvider

ทบทวน


New-PSDrive ช่วยให้คุณสามารถสร้าง PowerShell Drive ใหม่ได้ ไดรฟ์นี้สามารถอ้างอิงถึงคีย์รีจิสทรี นามแฝง สภาพแวดล้อม และอื่นๆ อีกมากมาย Get-PSProvider แสดงผู้ให้บริการ PowerShell ทั้งหมด


ไดรฟ์ PS สิ่งแวดล้อม

ตัวแปรสภาพแวดล้อมทั้งหมดจะถูกจัดเก็บไว้ในสภาพแวดล้อม PowerShell Drive:


Get-ChildItem env:

โปรดจำไว้ว่าคำสั่ง cmd บางคำสั่งไม่ทำงานใน PowerShell

ใน cmd set logonserver จะแสดง Active Directory Domain Controller ที่รับรองความถูกต้องของไคลเอ็นต์

สิ่งนี้ใช้ไม่ได้ใน PowerShell

นี่คือวิธีแก้ปัญหา: PS Drive Env

env PS Drive ช่วยให้คุณสามารถแสดงเซิร์ฟเวอร์การเข้าสู่ระบบ:


$env:LOGONSERVER

นอกจากนี้ ตัวอย่างบางส่วนของวิธีการทำงานใน cmd และ PowerShell (ฉันเปลี่ยนระหว่าง cmd และ PowerShell ในเซสชันเดียวกัน):

แสดงผู้ใช้ที่เข้าสู่ระบบปัจจุบัน


$env:username

set username

กำลังแสดงโฮมโฟลเดอร์ของผู้ใช้


$env:homepath

set homepath

นั่นคือจุดสิ้นสุดของส่วนนี้ ฉันหวังว่าฉันจะให้ภาพรวมที่ดีและกระตุ้นให้คุณติดตามความคืบหน้า ภาคต่อไปมีกำหนดไว้แล้ว

เราได้เรียนรู้อะไรบ้างจนถึงตอนนี้?


สามารถเข้าถึงตัวแปรสภาพแวดล้อมได้โดยใช้ Env PS Drive ใช้ $env: และกด TAB เพื่อสำรวจ


ออกกำลังกาย

นี่คือแบบฝึกหัดจนถึงส่วนถัดไป

การค้นพบ

ค้นหาวิธีแสดงชื่อคอมพิวเตอร์ด้วยสภาพแวดล้อม PS Drive

กำลังสร้าง

สร้าง PowerShell Drive แบบถาวรใหม่ที่อ้างอิงถึงโฟลเดอร์ที่ใช้ร่วมกันบนคอมพิวเตอร์ระยะไกล ค้นหาวิธีทำให้ไดรฟ์นี้คงอยู่ (ใช้ความช่วยเหลือแบบออนไลน์ ความช่วยเหลือในพื้นที่ หรืออะไรก็ตาม)

พบกันใหม่ในหัวข้อ: PowerShell สำหรับผู้เริ่มต้น (ตอนที่ 12): โมดูล PowerShell

แพทริค กรูเนาเออร์ MVP PowerShell

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