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






















