โรงเรียน Geek โดยใช้ PowerShell เพื่อรับข้อมูลคอมพิวเตอร์
WMI และ CIM ที่ใหม่กว่านั้นสามารถใช้เพื่อจัดการเครื่อง Windows ในสภาพแวดล้อมของคุณ แต่คุณรู้ความแตกต่างระหว่างพวกเขาหรือไม่ เข้าร่วมกับเราในขณะที่เราดู.
อย่าลืมอ่านบทความก่อนหน้าในซีรีย์:
- เรียนรู้วิธีอัตโนมัติของ Windows ด้วย PowerShell
- เรียนรู้การใช้ Cmdlets ใน PowerShell
- เรียนรู้วิธีใช้วัตถุใน PowerShell
- การเรียนรู้การจัดรูปแบบการกรองและการเปรียบเทียบใน PowerShell
- เรียนรู้การใช้ Remoting ใน PowerShell
และคอยติดตามตลอดซีรีย์ที่เหลือตลอดทั้งสัปดาห์.
บทนำ
WMI ย่อมาจาก Windows Management Instrumentation คำว่า "การประพันธ์ดนตรี" หมายถึงความจริงที่ว่า WMI ช่วยให้คุณได้รับข้อมูลเกี่ยวกับสถานะภายในของคอมพิวเตอร์ของคุณเช่นเดียวกับที่แผงหน้าปัดในรถของคุณสามารถดึงและแสดงข้อมูลเกี่ยวกับสถานะของส่วนประกอบภายในรถยนต์ของคุณ.
WMI ประกอบด้วยที่เก็บซึ่งมีคลาสที่แสดงส่วนประกอบที่สามารถจัดการได้ภายในเครื่องของคุณ โดยที่เราหมายถึงเพียงเพราะ WMI มีระดับ Win32_Battery ไม่ได้หมายความว่าเครื่องของคุณมีแบตเตอรี่ ชั้นเรียนเหล่านี้สามารถสอบถามข้อมูลในท้องถิ่นหรือผ่านเครือข่ายโดยใช้ภาษาแบบสอบถามคล้ายกับ SQL ที่เรียกว่า WQL อย่างไรก็ตาม WMI เป็นที่รู้จักกันไม่น่าเชื่อถือส่วนใหญ่เนื่องมาจากความจริงที่ว่ามันขึ้นอยู่กับ RPC (Remote Procedure Calls) ซึ่งทำสิ่งที่บ้าคลั่งกับพอร์ตที่พวกเขาเลือกที่จะสื่อสาร.
เริ่มต้นด้วย Windows 8 และ Server 2012 WMI กำลังถูกเลิกใช้งานในรูปแบบ Common Information Model หรือ CIM โดยย่อ ข้อแตกต่างระหว่าง WMI และ CIM คือโปรโตคอลการส่งผ่านที่ใช้ ในขณะที่ WMI ทำการสืบค้นโดยใช้ Remote Procedure Calls CIM ใช้ HTTP ซึ่งดูเหมือนจะสร้างความแตกต่างอย่างมาก ในแบ็กเอนด์พวกเขายังคงพูดคุยกับพื้นที่เก็บข้อมูลเดียวกัน.
ใช้ WMI
วิธีที่รวดเร็วและง่ายที่สุดในการสำรวจข้อมูลที่มีให้คุณผ่าน WMI คือการคัดลอก WMI Object Browser ฟรีใด ๆ เราชอบอันนี้ เมื่อดาวน์โหลดเสร็จแล้วก็จะมีส่วนต่อประสานกราฟิกเพื่อเรียกดู WMI Classes.
หากคุณต้องการหาข้อมูลบางอย่างเกี่ยวกับการกำหนดค่าดิสก์ของคอมพิวเตอร์ให้กดแป้นผสม Ctrl + F เพื่อเปิดช่องค้นหาจากนั้นพิมพ์“ logicaldisk” แล้วกด Enter.
ทันทีนี้จะนำคุณไปยังคลาส Win32_LogicalDisk.
ในครึ่งล่างของแอปพลิเคชันคุณจะเห็นว่าเรามีคลาสสองอินสแตนซ์.
เมื่อเรามีชั้นเรียนที่เรากำลังมองหาการสอบถามจาก PowerShell ตรงไปข้างหน้า.
Get-WmiObject- แบบสอบถาม“ เลือก * จาก Win32_LogicalDisk”
ฉันไม่เห็นไวยากรณ์นั้นอยู่พักหนึ่งกับผู้คนในปัจจุบันที่ต้องการใช้ไวยากรณ์ที่ปรับเปลี่ยนใหม่.
Get-WmiObject -Class Win32_LogicalDisk
หากคุณต้องการรับข้อมูลจากคอมพิวเตอร์เครื่องอื่นบนเครือข่ายของคุณคุณสามารถใช้พารามิเตอร์ ComputerName.
Get-WmiObject -Class Win32_LogicalDisk -ComputerName Viper -Credential viper \ administrator
ใช้ CIM
โปรดทราบว่า CIM นั้นมีเฉพาะใน Windows 8 และ Server 2012 เท่านั้นการก้าวไปข้างหน้านี่เป็นวิธีที่แน่นอน.
รับ -CimInstance -ClassName Win32_LogicalDisk
นอกจากนี้ยังมีความสมบูรณ์ของแท็บสำหรับพารามิเตอร์ -ClassName เมื่อใช้ Get-CimInstance ซึ่งแสดงให้เห็นว่าการก้าวไปข้างหน้านี่คือจุดที่ความพยายามของ Microsoft มุ่งเน้น.
ในความเป็นจริง WMI ได้รับการพัฒนาโดยทีมงานแยกต่างหากภายใน Microsoft แต่ต่อมาถูกยึดครองโดยคนที่รับผิดชอบ PowerShell พวกเขาเป็นคนที่สังเกตเห็นว่ามันเป็นเรื่องยากมากที่จะทำความสะอาดระเบียบที่ WMI ทิ้งไว้ ในความพยายามที่จะแก้ไขสถานการณ์พวกเขากำลังพยายามทำให้พร้อมใช้งาน WMI และ CIM มากขึ้นโดยการเขียนคำสั่ง wrapper cmdlet ที่ใช้ WMI และ CIM ใต้ฝากระโปรง วิธีเดียวที่จะตรวจสอบว่า cmdlet เป็น wrapper หรือไม่โดยดูที่เอกสาร ตัวอย่างเช่น cmdlet Get-Hotfix เป็น wrapper สำหรับคลาส Win32_QuickFixEngineering ดังที่เห็นในเอกสารประกอบ.
นั่นหมายความว่าคุณสามารถรับโปรแกรมแก้ไขด่วนบนเครื่องระยะไกลได้โดยใช้ Get-HotFix cmdlet แทนที่จะเป็น WMI Query.
Get-HotFix -ComputerName localhost
ดังนั้นคุณมีมัน เพียงจำไว้ว่าถ้ามี cmdlet เฉพาะคุณจะต้องการใช้มันเสมอตามมาด้วย CIM หาก cmdlet ไม่มีอยู่จริง ในที่สุดหากทุกอย่างล้มเหลวหรือคุณมีเครื่องจักรรุ่นเก่าในสภาพแวดล้อมของคุณคุณจะต้องใช้ WMI นั่นคือทั้งหมดที่ฉันมีในเวลานี้ พบกันใหม่พรุ่งนี้เพื่อความสนุก PowerShell.