Invoke-Expression (Microsoft.PowerShell.Utility)
Invoke-Expression
- โมดูล :
- Microsoft.PowerShell.Utility
รันคำสั่งหรือนิพจน์บนเครื่องคอมพิวเตอร์
ไวยากรณ์
Invoke-Expression
[-Command] <String>
[<CommonParameters>]คำอธิบาย
Invoke-Expression cmdlet ประเมินหรือรันสตริงที่ระบุเป็นคำสั่งและส่งกลับผลลัพธ์ของนิพจน์หรือคำสั่ง หากไม่มี Inrigger-Expression สตริงที่ส่งที่บรรทัดคำสั่งจะถูกส่งกลับ (สะท้อน) โดยไม่มีการเปลี่ยนแปลง
นิพจน์ได้รับการประเมินและรันในขอบเขตปัจจุบัน สำหรับข้อมูลเพิ่มเติม โปรดดูที่ about_Scopes
คำเตือน
ใช้ความระมัดระวังตามสมควรเมื่อใช้ cmdlet Inrigger-Expression ในสคริปต์ เมื่อใช้ Inrigger-Expression เพื่อรันคำสั่งที่ผู้ใช้ป้อน ให้ตรวจสอบว่าคำสั่งนั้นปลอดภัยในการรันก่อนที่จะรัน โดยทั่วไป วิธีที่ดีที่สุดคือออกแบบสคริปต์ด้วยตัวเลือกอินพุตที่กำหนดไว้ล่วงหน้า แทนที่จะปล่อยให้อินพุตมีรูปแบบอิสระ
ตัวอย่าง
ตัวอย่างที่ 1: ประเมินนิพจน์
$Command = "Get-Process"
$Command
Get-Process
Invoke-Expression $Command
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
296 4 1572 1956 20 0.53 1348 AdtAgent
270 6 1328 800 34 0.06 2396 alg
67 2 620 484 20 0.22 716 ati2evxx
1060 15 12904 11840 74 11.48 892 CcmExec
1400 33 25280 37544 223 38.44 2564 communicator
...
ตัวอย่างนี้สาธิตการใช้ Inrigger-Expression เพื่อประเมินนิพจน์ หากไม่มี Inrigger-Expression นิพจน์จะถูกพิมพ์ แต่จะไม่ได้รับการประเมิน
คำสั่งแรกกำหนดค่า Get-Process (สตริง) ให้กับตัวแปร $Command
คำสั่งที่สองแสดงผลของการพิมพ์ชื่อตัวแปรที่บรรทัดคำสั่ง PowerShell สะท้อนสตริง
คำสั่งที่สามใช้ Inrigger-Expression เพื่อประเมินสตริง
ตัวอย่างที่ 2: เรียกใช้สคริปต์บนเครื่องคอมพิวเตอร์
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expressionคำสั่งเหล่านี้ใช้ Inrigger-Expression เพื่อเรียกใช้สคริปต์ TestScript.ps1 บนเครื่องคอมพิวเตอร์ ทั้งสองคำสั่งเทียบเท่ากัน ขั้นแรกใช้พารามิเตอร์ Command เพื่อระบุคำสั่งที่จะรัน ส่วนที่สองใช้ตัวดำเนินการไปป์ไลน์ (|) เพื่อส่งสตริงคำสั่งไปที่ Inrigger-Expression
ตัวอย่างที่ 3: รันคำสั่งในตัวแปร
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Commandตัวอย่างนี้รันสตริงคำสั่งที่บันทึกไว้ในตัวแปร $Command
สตริงคำสั่งอยู่ในเครื่องหมายคำพูดเดี่ยวเนื่องจากมีตัวแปร $_ ซึ่งแสดงถึงวัตถุปัจจุบัน หากอยู่ในเครื่องหมายคำพูดคู่ ตัวแปร $_ จะถูกแทนที่ด้วยค่าของมันก่อนที่จะบันทึกลงในตัวแปร $Command
ตัวอย่างที่ 4: รับและเรียกใช้ตัวอย่างวิธีใช้ cmdlet
$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_codeคำสั่งนี้ดึงข้อมูลและเรียกใช้ตัวอย่างแรกในหัวข้อวิธีใช้ cmdlet Get-EventLog
หากต้องการเรียกใช้ตัวอย่างของ cmdlet อื่น ให้เปลี่ยนค่าของตัวแปร $Cmdlet_name เป็นชื่อของ cmdlet และเปลี่ยนตัวแปร $Example_number เป็นหมายเลขตัวอย่างที่คุณต้องการเรียกใช้ คำสั่งจะล้มเหลวหากหมายเลขตัวอย่างไม่ถูกต้อง
บันทึก
หากโค้ดตัวอย่างจากไฟล์วิธีใช้มีเอาต์พุตในตัวอย่าง PowerShell จะพยายามเรียกใช้เอาต์พุตพร้อมกับโค้ดและข้อผิดพลาดจะเกิดขึ้น
พารามิเตอร์
-Command
ระบุคำสั่งหรือนิพจน์ที่จะรัน พิมพ์คำสั่งหรือนิพจน์หรือป้อนตัวแปรที่มีคำสั่งหรือนิพจน์ จำเป็นต้องมีพารามิเตอร์ Command
- พิมพ์ :
String
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
อินพุต
สตริง
คุณสามารถไปป์สตริงที่แสดงถึงนิพจน์เพื่อเรียกใช้ cmdlet นี้ ใช้ตัวแปรอัตโนมัติ $Input เพื่อแสดงวัตถุอินพุตในคำสั่ง
PSObject
คุณสามารถไปป์วัตถุที่แสดงถึงนิพจน์เพื่อเรียกใช้ cmdlet นี้ ใช้ตัวแปรอัตโนมัติ $Input เพื่อแสดงวัตถุอินพุตในคำสั่ง
เอาท์พุต
ไม่มี
cmdlet นี้ไม่ส่งคืนเอาต์พุตของตัวเอง แต่คำสั่งที่เรียกใช้อาจส่งคืนเอาต์พุต
หมายเหตุ
PowerShell มีนามแฝงต่อไปนี้สำหรับ Inrigger-Expression:
ทุกแพลตฟอร์ม:
iex
ในกรณีส่วนใหญ่ คุณจะเรียกใช้นิพจน์โดยใช้ตัวดำเนินการเรียกของ PowerShell และได้ผลลัพธ์เดียวกัน โอเปอเรเตอร์การโทรเป็นวิธีที่ปลอดภัยกว่า สำหรับข้อมูลเพิ่มเติม โปรดดูที่ about_Operators