ของ PowerShell “ ตัวแปรอัตโนมัติ ” จำเป็นสำหรับการจัดการระบบ การทำงานอัตโนมัติ และกิจกรรมการเขียนสคริปต์ ตัวแปรเหล่านี้สร้างขึ้นภายในโดยรันไทม์ของ PowerShell และทำหน้าที่เป็นตัวยึดตำแหน่งเพื่อจัดเก็บและอ้างอิงข้อมูลเฉพาะระหว่างการดำเนินการของสคริปต์หรือคำสั่ง การทำความเข้าใจและใช้ประโยชน์จากตัวแปรอัตโนมัติเหล่านี้อย่างมีประสิทธิภาพสามารถเพิ่มประสิทธิภาพและการทำงานของสคริปต์ PowerShell ได้อย่างมาก
บทความนี้มีวัตถุประสงค์เพื่อสำรวจแนวคิดของ 'ตัวแปรอัตโนมัติ' ใน PowerShell ความสำคัญ และวิธีการใช้ประโยชน์จากสถานการณ์ต่างๆ
ตัวแปรอัตโนมัติใน PowerShell คืออะไร
ในการเริ่มต้น เรามาเจาะลึกคำจำกัดความของ “ ตัวแปรอัตโนมัติ '. ตัวแปรเหล่านี้ถูกกำหนดไว้ล่วงหน้าและถูกสร้างขึ้นโดยอัตโนมัติโดย PowerShell ระหว่างการทำงานของสคริปต์ สิ่งเหล่านี้ตอบสนองวัตถุประสงค์ที่แตกต่างกัน รวมถึงการให้ข้อมูลเกี่ยวกับระบบ อาร์กิวเมนต์บรรทัดคำสั่ง รายละเอียดเกี่ยวกับสคริปต์ และอื่นๆ อีกมากมาย
PowerShell มี 'ตัวแปรอัตโนมัติ' หลายตัว และแต่ละตัวมีจุดประสงค์ที่แตกต่างกันในการดำเนินการสคริปต์ ตัวแปรเหล่านี้มีดังนี้:
1. $PSVersionTable
หนึ่งในตัวแปรอัตโนมัติพื้นฐานใน PowerShell คือ “ $PSเวอร์ชันตาราง '. ตัวแปรนี้ช่วยให้นักพัฒนาสคริปต์สามารถตรวจสอบเวอร์ชันของ PowerShell ที่กำลังใช้งานอยู่ได้ ซึ่งอาจมีความสำคัญเมื่อพิจารณาความเข้ากันได้และความพร้อมใช้งานของฟีเจอร์และฟังก์ชันการทำงานบางอย่าง
คุณสมบัติต่อไปนี้เชื่อมโยงกับตัวแปรนี้:
รุ่น PS: ส่งกลับหมายเลขรุ่นของ PowerShell
ป.ล. ฉบับ: สำหรับ PowerShell 4 และรุ่นก่อนหน้า รวมถึง PowerShell 5.1 บน Windows รุ่นที่มีคุณลักษณะครบถ้วน คุณสมบัตินี้มีค่าเป็น 'เดสก์ท็อป' คุณลักษณะนี้มีค่าเป็น Core สำหรับ PowerShell 6 และใหม่กว่า เช่นเดียวกับ Windows PowerShell 5.1 สำหรับรุ่นที่ใช้พื้นที่น้อย เช่น Windows Nano Server หรือ Windows IoT
รหัส GitCommit: ดึงรหัสยืนยัน GitHub ของไฟล์ต้นฉบับ
คุณ: บันทึกข้อมูลเกี่ยวกับระบบคอมพิวเตอร์ที่ PowerShell ใช้อยู่
แพลตฟอร์ม: ส่งคืนแพลตฟอร์มที่รองรับของระบบปฏิบัติการ Unix มีค่าบน Linux และ macOS ตรวจสอบ $IsMacOs และ $IsLinux
PS รุ่นที่ใช้ร่วมกันได้: เวอร์ชัน PowerShell ที่เข้ากันได้กับเวอร์ชันปัจจุบันจะถูกส่งกลับ
PSRemotingโปรโตคอลเวอร์ชัน: ส่งกลับหมายเลขเวอร์ชันสำหรับโปรโตคอลการจัดการระยะไกลของ PowerShell
SerializationVersion: ส่งคืนเวอร์ชันของวิธีการทำให้เป็นอนุกรม
WSManStackเวอร์ชัน: ส่งคืนหมายเลขเวอร์ชันของสแต็ก WS-Management
$ ตารางเวอร์ชัน PS
2. $หาเรื่อง
ตัวแปรอัตโนมัติที่สำคัญอีกตัวใน PowerShell คือ “ $เถียง ” ซึ่งมีอาเรย์ของอาร์กิวเมนต์บรรทัดคำสั่งที่ส่งผ่านไปยังสคริปต์หรือฟังก์ชัน ตัวแปรนี้ช่วยให้นักพัฒนาสามารถประมวลผลและจัดการอาร์กิวเมนต์ที่ให้มาแบบไดนามิกภายในสคริปต์ของพวกเขา
เมื่อกำหนดฟังก์ชัน คุณอาจใช้คีย์เวิร์ด 'param' เพื่อประกาศพารามิเตอร์ หรือคุณสามารถเพิ่มรายการพารามิเตอร์ที่คั่นด้วยเครื่องหมายจุลภาคในวงเล็บต่อท้ายชื่อฟังก์ชัน ตัวแปร '$Args' ของการกระทำเหตุการณ์จะเก็บอ็อบเจ็กต์ที่ทำหน้าที่เป็นตัวยึดตำแหน่งสำหรับพารามิเตอร์เหตุการณ์ของเหตุการณ์ที่กำลังจัดการ:
แต่ละ ( $ หาเรื่อง ใน $เถียง ) {เขียนโฮสต์ $ หาเรื่อง
}
3. $MyInvocation
“ $MyInvocation ” ตัวแปรให้ข้อมูลพื้นหลังที่สำคัญเกี่ยวกับสคริปต์หรือขั้นตอนที่กำลังทำงานอยู่ นำเสนอคุณสมบัติต่างๆ เช่น ชื่อสคริปต์ หมายเลขบรรทัดสคริปต์ และไม่ว่าสคริปต์จะถูกเรียกใช้แบบโต้ตอบหรือไม่โต้ตอบ คุณสมบัติเหล่านี้ช่วยให้นักพัฒนาสคริปต์ใช้ตรรกะการโยงหัวข้อ กำหนดกลไกการจัดการข้อผิดพลาด หรือสร้างการบันทึกและการรายงานที่มีความหมาย:
$ คำขอของฉัน
4. $ข้อผิดพลาด
ตัวแปรอัตโนมัติที่ไม่ค่อยมีใครรู้จัก “ $ข้อผิดพลาด ” ดักจับข้อความแสดงข้อผิดพลาดหรือข้อยกเว้นใดๆ ที่เกิดขึ้นระหว่างการทำงานของสคริปต์ได้อย่างมีประสิทธิภาพ สามารถเข้าถึง “$Error” เพื่อดึงรายละเอียดข้อผิดพลาดเฉพาะ เช่น ข้อความแสดงข้อยกเว้น สแต็กเทรซ หรือรหัสข้อผิดพลาด ทำให้สามารถวิเคราะห์และแก้ไขจุดบกพร่องโดยละเอียดได้
ข้อผิดพลาดล่าสุดแสดงโดยวัตถุข้อผิดพลาดแรกในอาร์เรย์ “ $ข้อผิดพลาด[0] “. คุณสามารถใช้ตัวเลือกทั่วไปของ ErrorAction โดยมีค่า 'Ignore' เพื่อหยุดข้อผิดพลาดไม่ให้ถูกเพิ่มไปยังอาร์เรย์ '$Error'
สมมติว่าเราพิมพ์คำสั่งที่ถูกต้อง:
ไอพี [ รูป
ตอนนี้ หากเราป้อน cmdlet “$Error”:
$ ข้อผิดพลาด
5. $PSCMdlet
เมื่อทำงานกับโมดูล PowerShell ตัวแปรอัตโนมัติ “ $PSCMdlet ” มีผลบังคับใช้ ตัวแปรนี้ให้การเข้าถึงอินสแตนซ์ปัจจุบันของ cmdlet หรือฟังก์ชันที่กำลังเรียกใช้ ซึ่งอำนวยความสะดวกในการโต้ตอบโดยตรงกับคุณสมบัติและวิธีการ
เมื่อใช้ “$PSCmdlet” นักพัฒนาสคริปต์ขั้นสูงสามารถปรับแต่งและปรับปรุงลักษณะการทำงานของโมดูลโดยขยายหรือแก้ไขฟังก์ชันการทำงานในตัว คุณสามารถใช้แอตทริบิวต์และวิธีการของวัตถุใน cmdlet หรือโค้ดฟังก์ชันของคุณตามเกณฑ์การใช้งาน:
การทำงาน ประเภทของ psCmdlet {[ cmdletBinding ( ) ] พารามิเตอร์ ( )
เสียงสะท้อน 'ประเภทของ ` $psCmdlet เป็น $($psCmdlet.GetType() .ชื่อเต็ม)'
}
ประเภทของ psCmdlet
นอกเหนือจากตัวแปรที่กล่าวมาแล้ว PowerShell ยังรวมตัวแปรอัตโนมัติ เช่น $HOME, $PROFILE, $PWD และอื่นๆ อีกมากมาย ซึ่งให้บริการตามวัตถุประสงค์ที่แตกต่างกัน เช่น การเข้าถึงอินพุต ข้อผิดพลาดในการติดตาม การเรียกข้อมูลสภาพแวดล้อม การจัดการพารามิเตอร์ และอื่นๆ อีกมากมาย ตัวแปรเหล่านี้อยู่ด้านล่าง:
ตัวแปรอัตโนมัติ | คำอธิบาย |
$$ | เก็บโทเค็นสุดท้ายในบรรทัดก่อนหน้าที่ได้รับจากเซสชัน PowerShell |
$? | เก็บสถานะการดำเนินการของคำสั่งสุดท้าย |
$^ | ประกอบด้วยโทเค็นแรกของบรรทัดสุดท้ายที่เซสชันได้รับ |
$_ | แสดงวัตถุปัจจุบันในไปป์ไลน์ |
$Consoleชื่อไฟล์ | มีเส้นทางของไฟล์คอนโซล (.psc1) ที่ใช้ล่าสุดในเซสชัน |
$EnabledExperimentalFeatures | ประกอบด้วยรายการคุณลักษณะทดลองที่เปิดใช้งาน |
$เหตุการณ์ | มีวัตถุ “PSEventArgs” ที่แสดงถึงเหตุการณ์ที่กำลังดำเนินการ |
$Event อาร์กิวเมนต์ | มีอาร์กิวเมนต์เหตุการณ์แรกของเหตุการณ์ที่กำลังดำเนินการ |
$EventSubscriber | แสดงถึงสมาชิกเหตุการณ์ของเหตุการณ์ที่กำลังดำเนินการ |
$ExecutionContext | แสดงบริบทการดำเนินการของโฮสต์ PowerShell |
$ เท็จ | แสดงถึงค่าบูลีน “เท็จ” |
$foreach | มีตัวแจงนับของลูป 'for-Each' |
$บ้าน | ประกอบด้วยพาธแบบเต็มของโฮมไดเร็กทอรีของผู้ใช้ |
$โฮสต์ | แสดงถึงแอปพลิเคชันโฮสต์ปัจจุบันสำหรับ PowerShell |
$อินพุต | ทำหน้าที่เป็นตัวแจงนับสำหรับอินพุตทั้งหมดที่ส่งผ่านไปยังฟังก์ชันหรือสคริปต์ |
$IsCoreCLR | ระบุว่าเซสชันทำงานบน .NET Core Runtime (CoreCLR) หรือไม่ |
$IsLinux | ระบุว่าเซสชันทำงานบนระบบปฏิบัติการ Linux หรือไม่ |
$IsMacOS | ระบุว่าเซสชันทำงานบนระบบปฏิบัติการ MacOS หรือไม่ |
$IsWindows | ระบุว่าเซสชันทำงานบนระบบปฏิบัติการ Windows หรือไม่ |
$LASTEXITCODE | เก็บรหัสทางออกของโปรแกรมดั้งเดิมล่าสุดหรือสคริปต์ PowerShell |
$ตรงกัน | มีสตริงที่ตรงกันจากตัวดำเนินการ '-match' และ '-notmatch' |
$NestedPromptLevel | ติดตามระดับพรอมต์ปัจจุบันในคำสั่งที่ซ้อนกันหรือสถานการณ์การดีบัก |
$null | แสดงถึงค่าว่างหรือค่าว่าง |
$PID | มีตัวระบุกระบวนการ (PID) ของเซสชัน PowerShell |
$โปรไฟล์ | มีเส้นทางแบบเต็มของโปรไฟล์ PowerShell สำหรับผู้ใช้ปัจจุบันและแอปพลิเคชันโฮสต์ |
$PSBoundParameters | เก็บพจนานุกรมของพารามิเตอร์ที่ส่งไปยังสคริปต์หรือฟังก์ชันและค่าต่างๆ |
$PSCommandPath | ประกอบด้วยพาธแบบเต็มและชื่อไฟล์ของสคริปต์ที่กำลังดำเนินการ |
$PSCulture | สะท้อนให้เห็นถึงวัฒนธรรมของพื้นที่เรียกใช้ PowerShell ปัจจุบัน |
$PSEdition | มีข้อมูลรุ่น PowerShell |
$PSHOME | มีเส้นทางแบบเต็มของไดเร็กทอรีการติดตั้ง PowerShell |
$PSItem | เช่นเดียวกับ $_ แสดงถึงวัตถุปัจจุบันในไปป์ไลน์ |
$PSScriptRoot | มีพาธแบบเต็มของไดเร็กทอรีพาเรนต์ของสคริปต์เรียกทำงาน |
$PSSenderInfo | มีข้อมูลเกี่ยวกับผู้ใช้ที่เริ่มต้น PSSession |
$PSUICulture | สะท้อนวัฒนธรรมอินเทอร์เฟซผู้ใช้ (UI) ที่กำหนดค่าในระบบปฏิบัติการ |
$PWD | แสดงถึงไดเร็กทอรีการทำงานปัจจุบันของเซสชัน PowerShell |
$ผู้ส่ง | มีวัตถุที่สร้างเหตุการณ์ |
รหัสเชลล์ $ | มีตัวระบุของเชลล์ปัจจุบัน |
$StackTrace | เก็บการติดตามสแต็กสำหรับข้อผิดพลาดล่าสุด |
$สวิตช์ | มีตัวแจงนับของคำสั่ง 'Switch' |
$นี้ | อ้างถึงอินสแตนซ์ของคลาสในบล็อคสคริปต์ที่ขยายคลาส |
$จริง | แสดงค่าบูลีน “จริง” |
คุณสามารถค้นหา 'ตัวแปรอัตโนมัติ' ทั้งหมดใน PowerShell ได้โดยการเรียกใช้คำสั่งด้านล่าง:
รับตัวแปร
บทสรุป
“ ตัวแปรอัตโนมัติ ” สร้างแกนหลักของการเขียนสคริปต์ PowerShell ช่วยให้นักพัฒนาได้รับข้อมูลเกี่ยวกับระบบ อาร์กิวเมนต์บรรทัดคำสั่ง บริบทการดำเนินการของสคริปต์ และอื่นๆ ด้วยการควบคุมตัวแปรอัตโนมัติ เช่น “$PSVersionTable”, “$Args”, “$MyInvocation”, “$Error” และอื่นๆ นักพัฒนาสคริปต์ PowerShell สามารถสร้างแนวทางปฏิบัติในการดูแลระบบที่มีความคล่องตัว