วิธีการเรียกใช้วัตถุที่เก็บข้อมูลโดยใช้ CIM และ WMI
หากต้องการใช้วิธีการกับวัตถุ คุณต้องเรียกใช้ คุณสามารถทําสิ่งนี้ให้สําเร็จได้โดยใช้การเรียกใช้โดยตรง ซึ่งรวมถึงการอ้างอิงไปยังวัตถุที่สนับสนุนวิธีการ ตามด้วยชื่อเมธอด อีกวิธีหนึ่งคือ คุณสามารถใช้ invoke-WmiMethod หรือ Invoke-CimMethod cmdlets ถ้าคุณใช้ cmdlet cmdlet ที่คุณใช้จําเป็นต้องตรงกับชนิดของวัตถุที่คุณกําลังทํางานอยู่
การเรียกโดยตรง
โดยทั่วไปจะมีการใช้การเรียกโดยตรงเมื่อคุณได้โหลดออบเจ็กต์ Windows Management Instrumentation (WMI) ลงในตัวแปร จากนั้น คุณสามารถเรียกใช้เมธอด ที่พร้อมใช้งานสําหรับชนิดออบเจ็กต์นั้นโดยการระบุชื่อตัวแปร จุด () และวิธีการ ซึ่งคล้ายกับวิธีที่คุณแสดงค่าคุณสมบัติสําหรับวัตถุที่มีอยู่ในตัวแปร ตัวอย่างต่อไปนี้คิวรีบริการตัวจัดคิวเป็นวัตถุ WMI แล้วเรียกใช้เมธอด StopService
$WmiSpoolerService = Get-WmiObject -Class Win32_Service -Filter "Name='Spooler'"
$WmiSpoolerService.StopService()
วิธี StopService ในตัวอย่างก่อนหน้านี้ไม่จําเป็นต้องส่งพารามิเตอร์ใดๆ ไปยังเมธอดดังกล่าว ดังนั้นจึงไม่มีค่าภายในวงเล็บ หากคุณเรียกใช้วิธีการที่จําเป็นต้องมีพารามิเตอร์ ค่าเหล่านั้นจะถูกวางไว้ภายในวงเล็บ ตัวอย่างต่อไปนี้ตั้งค่าพารามิเตอร์ของโหมดเริ่มต้นเป็น ด้วยตนเอง :
$WmiSpoolerService.ChangeStartMode("Manual")
หากต้องการระบุพารามิเตอร์ที่จําเป็นสําหรับวิธีการ คุณควรตรวจสอบเอกสารประกอบสําหรับคลาส โปรดทราบว่าพารามิเตอร์สําหรับพารามิเตอร์เมธอด WMI จําเป็นต้องส่งผ่านตามลําดับที่ระบุ เมื่อต้องการระบุลําดับ คุณสามารถใช้วิธี GetMethodParameters() ได้ ตัวอย่างต่อไปนี้จะคิวรีพารามิเตอร์สําหรับวิธีการ Change:
$WmiSpoolerService.GetMethodParameters("Change")
ถ้าเมธอด จําเป็นต้องมีหลายพารามิเตอร์ และคุณไม่ต้องการเปลี่ยนแปลงพารามิเตอร์บางรายการ คุณสามารถส่งผ่านค่า $null สําหรับพารามิเตอร์ที่คุณไม่ต้องการเปลี่ยนได้ นอกจากนี้ คุณไม่จําเป็นต้องระบุพารามิเตอร์ที่อยู่ในตําแหน่งหลังจากพารามิเตอร์ที่คุณต้องการเปลี่ยน ในตัวอย่างต่อไปนี้ วิธีการเปลี่ยนมีพารามิเตอร์ 11 ตัว แต่มีการกําหนดค่าเฉพาะพารามิเตอร์ที่สอง (ชื่อที่แสดง)
$WimSpoolerService.Change($null,"Printer Service")
โน้ต
เนื่องจาก $null ถือว่าเป็นค่าพารามิเตอร์ที่จะข้ามเมื่อเรียกใช้เมธอด คุณไม่สามารถตั้งค่า $null โดยการเรียกใช้เมธอด บนวัตถุ WMI
โน้ต
วัตถุที่เรียกใช้โดย Get-CimInstance เป็นแบบคงที่และไม่มีเมธอด ดังนั้นคุณไม่สามารถใช้ได้โดยขึ้นอยู่กับการเรียกใช้โดยตรง
การใช้ cmdlet ของ Invoke-WmiMethod
Invoke-WmiMethod cmdlet เป็นอีกวิธีหนึ่งในการเรียกใช้วิธีการสําหรับวัตถุ WMI ที่มีไวยากรณ์ที่แตกต่างกัน พารามิเตอร์ -Name ถูกใช้เพื่อระบุวิธีการที่จะเรียกใช้ และใช้พารามิเตอร์ -Argument เพื่อระบุค่าพารามิเตอร์ที่ส่งผ่านไปยังเมธอด ถ้าจําเป็น หลายพารามิเตอร์จะถูกส่งผ่านเป็นรายการหรืออาร์เรย์ที่คั่นด้วยเครื่องหมายจุลภาค ค่าพารามิเตอร์จําเป็นต้องอยู่ในลําดับเฉพาะเช่นเดียวกับการเรียกใช้โดยตรง
คุณสามารถใช้ Invoke-WmiMethod cmdlet ด้วยตัวเอง หรือคุณสามารถใช้ไปป์ไลน์เพื่อส่งวัตถุ WMI ได้ นี่คือสองตัวอย่างที่ทํางานด้วยวิธีเดียวกัน:
Get-WmiObject -Class Win32_OperatingSystem | Invoke-WmiMethod -Name Win32Shutdown -Argument 0
Invoke-WmiMethod -Class Win32_OperatingSystem -Name Win32Shutdown -Argument 0
Get-WmiObject และ Invoke-Method cmdlets ทั้งคู่มีพารามิเตอร์ -ComputerName ที่ช่วยให้คุณสามารถเรียกใช้ cmdlet บนคอมพิวเตอร์ระยะไกลได้
การใช้ cmdlet ของ Invoke-CimMethod
cmdlet Invoke-CimMethod ให้ฟังก์ชันการทํางานที่คล้ายคลึงกันกับ cmdlet Invoke-WmiMethod แต่รายการอาร์กิวเมนต์สําหรับ Invoke-CimMethod เป็นวัตถุพจนานุกรม วัตถุดังกล่าวประกอบด้วยคู่คีย์-ค่าอย่างน้อยหนึ่งคู่ คีย์สําหรับแต่ละคู่คือชื่อพารามิเตอร์ และค่าสําหรับแต่ละคู่คือค่าพารามิเตอร์ที่สอดคล้องกัน ในตัวอย่างต่อไปนี้ Path คือชื่อของพารามิเตอร์ และ Notepad.exe คือค่า:
Invoke-CimMethod -ComputerName LON-DC1 -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine='Notepad.exe'}
เมื่อต้องการรวมหลายพารามิเตอร์ในพจนานุกรม ให้ใช้เครื่องหมายอัฒภาคเพื่อแยกคู่คีย์-ค่าแต่ละคู่ เนื่องจากมีชื่อพารามิเตอร์ คู่คีย์-ค่าจึงอยู่ในลําดับใดก็ได้
ในการเรียกใช้เมธอด บนอินสแตนซ์เฉพาะของวัตถุ คุณเรียกใช้วัตถุก่อนโดยใช้ Get-CimInstance cmdlet คุณสามารถไปป์วัตถุโดยตรงไปยัง Invoke-CimMethod cmdlet หรือเก็บไว้ในตัวแปรก่อน ถ้าวัตถุมีข้อมูลที่จําเป็นทั้งหมด คุณไม่จําเป็นต้องระบุอาร์กิวเมนต์ใดๆ ตัวอย่างต่อไปนี้จะเรียกใช้อินสแตนซ์ของ Notepad.exe ที่กําลังทํางานอยู่และยุติอินสแตนซ์เหล่านั้น:
Get-CimInstance -ClassName Win32_Process -Filter "Name='notepad.exe'" | Invoke-CimMethod -MethodName Terminate
ถ้าคุณใช้พารามิเตอร์ -ComputerName หรือ -CIMSession กับ cmdlet Get-CimInstance cmdlet และไปป์วัตถุที่เป็นผลลัพธ์ไปยัง Invoke-CimMethod cmdlet วิธีการจะถูกเรียกใช้บนคอมพิวเตอร์หรือเซสชันใดก็ตามที่มาของวัตถุ ตัวอย่างเช่น เมื่อต้องการยุติกระบวนการบนคอมพิวเตอร์ระยะไกล คุณสามารถเรียกใช้คําสั่งต่อไปนี้:
Get-CimInstance -ClassName Win32_Process -Filter "Name='notepad.exe'" -Computername LON-DC1 | Invoke-CimMethod -MethodName Terminate