ค้นหาเว็บไซต์

วิธีการส่งออกการตอบสนอง Invivo-MgGraphRequest เป็นวัตถุ PowerShell


Invivo-MgGraphRequest ด้วย Microsoft Graph PowerShell เป็น cmdlet ที่ยืดหยุ่นซึ่งช่วยให้คุณทำการเรียก Microsoft Graph API ได้เกือบทุกครั้ง และทำหน้าที่เป็นตัวรับทั้งหมดสำหรับพื้นที่ที่ Microsoft Graph PowerShell SDK ไม่ครอบคลุม หากต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้คำสั่งโดยเฉพาะ โปรดดูโพสต์ของฉันที่นี่

ปัญหาประการหนึ่งของคำสั่งนี้ แม้ว่าในกรณีส่วนใหญ่จะมีประโยชน์ก็ตาม ก็คือ โดยค่าเริ่มต้นเมื่อคุณส่งคำขอ GET ไปยัง Microsoft Graph การตอบกลับของคุณจะถูกส่งกลับหาคุณในรูปแบบแฮชเทเบิลซึ่งไม่มีประโยชน์เท่ากับคำสั่งอื่นๆ ที่มีให้ รูปแบบ มาดูกันว่าเราจะรับการตอบกลับในรูปแบบที่สามารถจัดการได้มากขึ้น เช่น PowerShell Objects ได้อย่างไร!

ตรวจสอบประเภทการตอบกลับด้วย '.GetType()'

ขั้นแรก หากต้องการดูว่าการตอบสนองเริ่มต้นต่อคำขอ GET มีลักษณะอย่างไรใน PowerShell เราสามารถประเมินประเภทข้อมูลได้ ที่นี่ฉันจะเชื่อมต่อกับ Microsoft Graph PowerShell และทำการเรียก GET ไปยังปลายทาง /v1.0/me ซึ่งจะดึงข้อมูลผู้ใช้พื้นฐานสำหรับการเข้าสู่ระบบในปัจจุบัน ผู้ใช้

Connect-MgGraph

$dflt= Invoke-MgGraphRequest -uri "https://graph.microsoft.com/v1.0/me" -method GET

ตอนนี้การตอบสนองของเราถูกบันทึกไว้ในตัวแปรของเรา ด้วยการผนวก .GetType() เข้ากับตัวแปรนั้น เราจึงสามารถตรวจสอบประเภทข้อมูลได้

$default.GetType()

คำตอบของเราจะระบุรายละเอียดชื่อประเภทออบเจ็กต์ ซึ่งในกรณีนี้คือ Hashtable:

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                                                                                                                                         
-------- -------- ----                                     --------                                                                                                                                                                                                                                                                                                         
True     True     Hashtable                                System.Object   

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

วิธีแก้ปัญหาที่ง่ายกว่า (แต่อาจมีประสิทธิภาพน้อยกว่า) คือการเปลี่ยนประเภทการตอบสนองเป็น PowerShell Object ซึ่งโดยทั่วไปจะใช้งานได้ง่ายกว่า

การเปลี่ยนประเภทเอาต์พุตด้วยพารามิเตอร์ '-OutputType'

พารามิเตอร์ -OutputType ช่วยให้คุณเปลี่ยนวิธี (ประเภท) ข้อมูลที่จะส่งคืนให้คุณในเซสชัน PowerShell พารามิเตอร์รองรับสี่ประเภทที่แตกต่างกัน ได้แก่:

  • แฮชตาราง
  • HttpResponseMessage
  • เจสัน
  • PSObject

ประเภทเอาต์พุตที่มีประโยชน์ที่สุดเมื่อทำงานกับ PowerShell คือประเภท PSObject (หรืออย่างน้อยก็สำหรับผู้ดูแลระบบทั่วไป) เมื่อใช้ PowerShell โดยทั่วไปออบเจ็กต์จะใช้งานได้ง่ายกว่า ข้อมูลจะแสดงได้ชัดเจนยิ่งขึ้น และมีโครงสร้างที่ดี นอกจากนี้คุณยังจะพบว่าการแปลงและส่งออกข้อมูลดังกล่าวเป็นไฟล์ CSV นั้นง่ายกว่า ซึ่งมักใช้ในการสร้างรายงาน หากคุณพยายามส่งออกแฮชเทเบิลเป็น CSV แทน คู่คีย์/ค่าจะไม่แสดงอย่างที่ควรจะเป็น

เราสามารถเติม “-OutputType PSObject” ต่อท้ายตัวอย่างข้างต้นเพื่อให้ได้ผลลัพธ์ที่ต้องการ:

$psobj = Invoke-MgGraphRequest -uri "https://graph.microsoft.com/v1.0/me" `
-method GET -OutputType PSObject

มาตรวจสอบประเภทข้อมูลโดยผนวก .GetType() ต่อท้ายตัวแปรของเรา:

$psobj.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                                                                                                                                         
-------- -------- ----                                     --------                                                                                                                                                                                                                                                                                                         
True     False    PSCustomObject                           System.Object 

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

ห่อ

แม้ว่าแฮชเทเบิลจะมีประโยชน์ แต่สำหรับผู้ดูแลระบบ Microsoft 365 ที่ต้องการตีความข้อมูลในลักษณะที่พวกเขาอาจคุ้นเคยอยู่แล้ว ประเภท PSObject จะให้ประสบการณ์ที่ดีที่สุดแก่พวกเขา เมื่อคุณมีข้อมูลเป็นออบเจ็กต์แบบกำหนดเองแล้ว คุณจะสามารถโต้ตอบกับข้อมูลในลักษณะเดียวกับที่คุณทำกับการตอบกลับจาก SDK cmdlets อื่น ๆ เช่น Get-MgUser เป็นต้น

บทความที่เกี่ยวข้อง