การปรับปรุงห้าประการที่ PowerShell ต้องการจริงๆ

  • Sep 26, 2023

PowerShell เป็นหนึ่งในเครื่องมือ Windows ที่ดีที่สุดที่มีอยู่ แต่อาจดีกว่านี้อีก ต่อไปนี้เป็นคำแนะนำห้าข้อของฉันเพื่อประสบการณ์การใช้งาน PowerShell ที่ดียิ่งขึ้น

PowerShell เป็นภาษาสคริปต์ของ Microsoft ซึ่งขณะนี้เป็นการทำซ้ำครั้งที่สาม เป็นเครื่องมือที่ทรงพลังอย่างมากสำหรับใช้สำหรับงานอัตโนมัติ การดูแลระบบ การทำงานจากระยะไกลบนระบบ หรือการทำงานบนหลายระบบพร้อมกัน คุณสามารถใช้แบบโต้ตอบหรือในสคริปต์ได้ คุณยังสามารถสัมผัสหลายระบบในสคริปต์ได้โดยใช้กลไกการวนซ้ำที่มีประโยชน์ แล้วเราจะต้องการอะไรอีกจาก PowerShell ที่ยังไม่ได้ทำ? มากมาย.

ตกลง ก่อนอื่น PowerShell เป็นภาษาโมดูลาร์ ดังนั้นนั่นจึงเป็นประเด็นสำคัญประการหนึ่งที่สนับสนุน ทำไม เนื่องจากความเป็นโมดูลทำให้สามารถขยายได้ "โดยสมัครใจ" โดยความสมัครใจ ฉันหมายถึงว่าสามารถขยายได้โดยการเพิ่มโมดูล แทนที่จะบรรจุทุกอย่างไว้แล้วโดยไม่มีความเป็นไปได้ในการขยาย

PowerShell 3.0 เป็นส่วนขยายที่ยิ่งใหญ่เหนือ PowerShell 2.0 PowerShell 3.0 มาพร้อมกับ cmdlets นับพันสำหรับเกือบทุกวัตถุประสงค์ — เกือบ และนั่นคือจุดเริ่มต้นของโพสต์นี้ — โดยที่ PowerShell 3.0 หายไป

นี่คือรายการสิ่งที่ฉันคิดว่า PowerShell 3.0 ยังต้องการ:

  1. *ห้ามใช้ยูทิลิตี้การเชื่อมต่อ — เครื่องมือสำหรับการเชื่อมต่อสไตล์ *nix ที่ขาดหายไปอย่างกล้าหาญ เช่น SSH, SCP, SFTP และอื่นๆ มีโมดูลของบุคคลที่สามบางส่วนสำหรับสิ่งนี้ แต่ก็ไม่ค่อยดีนักแม้ว่าฉันจะประสบความสำเร็จบ้างก็ตาม SSHเซสชัน

  2. การสนับสนุนการสำรอง/กู้คืน — คงจะดีไม่น้อยถ้ามีเครื่องมือสำรองและกู้คืนข้อมูลเชิงลึกใน PowerShell และยูทิลิตี้บรรทัดคำสั่งเวอร์ชันปรับปรุง เช่น AT และ NTBACKUP

  3. รองรับเอาท์พุตที่ดีกว่า — PowerShell มี -OutFile และ -ส่งออกCSV การเปลี่ยนเส้นทางเอาต์พุต แต่คุณไม่สามารถรับสิ่งที่คุณต้องการจากสิ่งเหล่านี้ได้เสมอไป เนื่องจากเอาต์พุตบางส่วนไม่สามารถเปลี่ยนเส้นทางได้ สำหรับเอาต์พุตบางรายการ คุณสามารถทำสิ่งต่อไปนี้:
    ปล.> script.ps1 > ไฟล์.txt แล้วใช้ไฟล์ข้อความ อย่างไรก็ตาม มีบางครั้งที่การเปลี่ยนเส้นทาง "ไม่อยู่ในสคริปต์" ประเภทนั้นใช้ไม่ได้กับเอาต์พุตเช่นกัน คุณควรเห็นวิธีบ้าๆ บางอย่างที่ฉันต้องดึงเอาต์พุตจากสคริปต์ ฉันอยากเห็นการเปลี่ยนเส้นทางเอาต์พุตที่ดีขึ้น กล่าวอีกนัยหนึ่งอะไรก็ตามที่ฉันสามารถส่งออกไปยังหน้าจอ (STDOUT) ฉันอยากเห็นการสนับสนุนจริงๆ -OutFile หรือ -ส่งออกCSV หรือตัวเลือกการเปลี่ยนเส้นทางอื่นๆ

  4. นำเข้าเมื่อใช้งานครั้งแรก — แทนที่จะนำเข้าโมดูลที่มีตราสินค้า Microsoft เช่น โมดูล Active Directory คุณควรจะสามารถดาวน์โหลดและติดตั้งโมดูลเหล่านี้ได้ในการใช้งานครั้งแรก เช่นเดียวกับที่คุณทำกับคุณสมบัติอื่นๆ บางอย่างของ Microsoft นี่จะเป็นคุณสมบัติที่มีประโยชน์มาก ตัวอย่างเช่น ฉันสามารถเรียกใช้ a รับ-ADUser บนระบบ และ PowerShell จะนำเข้าโมดูลและเรียกใช้ cmdlet โดยไม่มีการโต้ตอบจากฉัน

  5. แยกและจัดรูปแบบข้อมูลได้ง่ายขึ้น — คุณสามารถดึงข้อมูลดีๆ มากมายได้โดยใช้ PowerShell แต่การได้รับข้อมูลที่คุณต้องการให้อยู่ในรูปแบบที่ต้องการ (อ่านได้) นั้นเป็นเรื่องยากมาก ตัวอย่างเช่น, ปล.>รับกระบวนการ แสดงรายการกระบวนการจากระบบของคุณในรูปแบบตารางดังแสดงในรูปที่ 1

กระบวนการ_ps
รูปที่ 1: รายการกระบวนการบางส่วน — PowerShell (ภาพ: ภาพหน้าจอโดย Ken Hess/ZDNet)

ตอนนี้ลองแสดงรายการ Process ID และ ProcessName ด้วย ปล.> รับกระบวนการ | รหัส FT, ชื่อกระบวนการ

ดูผลลัพธ์ในรูปที่ 2

รูปที่ 2: กระบวนการกรองตาม ID และชื่อกระบวนการ (ภาพ: ภาพหน้าจอโดย Ken Hess/ZDNet)

คุณเห็นปัญหาหรือไม่? ตอนนี้คุณอาจคิดว่านี่ไม่ใช่ปัญหา เนื่องจากคุณสามารถใช้รูปแบบตำแหน่งดั้งเดิมแปลก ๆ หรือนำมันไปยังไฟล์ข้อความก็ได้ ผิด. เมื่อคุณกำหนดทิศทางเอาต์พุตไปยังไฟล์ข้อความ คุณจะได้รับไฟล์ข้อความโดยที่คอลัมน์ถูกผลักออกไปทางขวา เช่นเดียวกับที่อยู่บนหน้าจอ

ลืมเกี่ยวกับ รูปแบบกว้าง; มันไม่ทำงาน รูปแบบรายการ น่าเกลียดกว่าด้วยซ้ำ รูปแบบตาราง. และถ้าคุณพูดว่า "ลอง รูปแบบ-กำหนดเอง"; มันแย่กว่าอันอื่นแม้ว่าฉันคิดว่าคุณสามารถสร้างมุมมองที่กำหนดเอง (ไฟล์ XML) และใช้สำหรับรูปแบบที่ดีกว่าได้ แต่จริงๆ แล้ว นั่นเป็นปัญหามากสำหรับรายการ ID และชื่อกระบวนการง่ายๆ

หากนี่เป็นสภาพแวดล้อม *nix ฉันจะทำสิ่งนี้เพื่อให้ได้รูปแบบที่ฉันต้องการ:

$ PS -ef | เพ่งพิศ -F" " '{พิมพ์ $2,$8}'

ให้ผลผลิต,

พีไอดี ซีเอ็มดี
1 /sbin/init
2 [kthreadd]
3 [การโยกย้าย/0]
4 [ksoftirqd/0]
5 [สุนัขเฝ้าบ้าน/0]
6 [การโยกย้าย/1]
7 [ksoftirqd/1]

และอันที่จริง สิ่งที่ฉันจะทำบนระบบ Windows ของฉันตั้งแต่ฉันมี ซิกวิน เครื่องมือที่ติดตั้งและอยู่ในเส้นทางของฉันในระบบอัตโนมัติคือ:

ปล.> รับกระบวนการ |gawk -F" " '{พิมพ์ $7,$8}'

ให้ผลผลิต,

รหัสกระบวนการชื่อ
--
3780 AmIcoSinglun64
1788 AppleMobileDeviceService
4900 ApplePhotoStreams
5396 APSดีมอน
1764 อาร์มวีซี
3844 atieclxx
948 atiesrxx
1444 AvastSvc
5188 AvastUI

ฉันไม่ควรต้องใช้มาตรการดังกล่าวเพื่อให้ได้สิ่งที่ต้องการในแง่ของการจัดรูปแบบ หากคุณรู้วิธีที่ดีกว่าฉันก็อยากจะเห็นมัน จนถึงตอนนี้ฉันยังไม่พบมัน แม้ว่าฉันจะมองหาวิธีแก้ไขแล้วก็ตาม

โอเค นั่นเป็นหมายเลขห้าที่ยาวมาก แต่บางครั้งก็ช่วยอธิบายประเด็นในการขับรถกลับบ้านได้อย่างเต็มที่

[อัปเดต: ผู้อ่านคนหนึ่งของฉันได้ให้การแก้ไขปัญหานี้ด้วยสวิตช์ -ปรับขนาดอัตโนมัติ หากวิธีนี้ใช้ได้กับการจัดรูปแบบทั้งหมด ฉันเดาว่าเราสามารถทำเครื่องหมายหมายเลขห้าออกจากรายการได้ ขอบคุณ.]

นี่คือการปรับปรุง PowerShell ห้าประการของฉันที่ฉันอยากเห็น คุณมีการปรับปรุงใด ๆ ที่คุณต้องการรวมไว้ในการอัปเดต PowerShell หรือไม่? คุยกลับแล้วแจ้งด้วย..