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

วิธีใช้ Cloud Shell จากศูนย์การจัดการ Microsoft Teams


แต่ทางเลือกที่ดีกว่าคือ PowerShell แบบเก่าธรรมดา

ประกาศในการแจ้งเตือนศูนย์ข้อความ MC289245 (4 ต.ค. 2021 รายการแผนงาน Microsoft 365 82708) ความสามารถในการเรียกใช้เซสชัน Azure Cloud Shell จากศูนย์การจัดการ Teams พร้อมใช้งานแล้วในผู้เช่า เห็นได้ชัดว่าแนวคิดคือการอนุญาตให้ผู้ดูแลระบบ Teams ทำงานโดยใช้ cmdlets ในโมดูล Microsoft Teams PowerShell โดยไม่ต้องติดตั้งอะไรบนเวิร์กสเตชัน ตามที่กล่าวไว้ด้านล่าง Cloud Shell สามารถเรียกใช้ Teams cmdlets ได้อย่างแน่นอน แต่ข้อจำกัดที่กำหนดโดยการใช้งานนั้นฉันไม่แนะนำให้ใช้แนวทางนี้ เว้นแต่คุณจะต้องทำอย่างยิ่ง

ใช้งาน Cloud Shell

หากต้องการเริ่มเซสชัน Cloud Shell ใหม่ ให้คลิกไอคอนเชลล์ในแถบเบราว์เซอร์ บานหน้าต่างจะเปิดขึ้นใต้ศูนย์การจัดการ เชื่อมต่อกับ Azure และสร้างไดรฟ์บนคลาวด์ เบื้องหลัง Azure ได้สร้างอินสแตนซ์ PowerShell Core ใหม่ที่ทำงานบนเครื่องเสมือน Linux บนโฮสต์ Hyper-V ในหลาย ๆ ด้าน สิ่งต่างๆ ไม่ได้คืบหน้ามากนักนับตั้งแต่ Vasil Michev ตรวจสอบ Cloud Shell เมื่อสามปีที่แล้ว

เมื่อเชื่อมต่อกับเซสชันเชลล์แล้ว คุณสามารถเรียกใช้ Connect-MicrosoftTeams cmdlet เพื่อเชื่อมต่อกับ Teams และโหลด cmdlets จากโมดูลได้ หลังจากโหลดโมดูลแล้ว คุณสามารถเรียกใช้ cmdlets ของโมดูลได้ (รูปที่ 1)

ไม่ใช่แค่ศูนย์การจัดการทีมเท่านั้น

ฟังก์ชันเดียวกันนี้จะพร้อมใช้งานหากคุณเริ่มเซสชัน Cloud Shell จากศูนย์การจัดการ Microsoft 365 กล่าวอีกนัยหนึ่ง ไม่ใช่ข่าวว่าคุณสามารถเริ่ม Cloud Shell จากศูนย์การจัดการ Teams ได้ แต่เป็นที่ Microsoft ได้ทำวิศวกรรมเพื่อทำให้ Teams cmdlets พร้อมใช้งานกับ Cloud Shell ไม่ว่าคุณจะสร้างเซสชัน Cloud Shell จากที่ใด ฉันสามารถเรียกใช้ Teams cmdlets ใน Cloud Shell ได้จากศูนย์การจัดการ Microsoft 365, พอร์ทัล Azure, ศูนย์การจัดการ Teams และแอป Azure สำหรับอุปกรณ์เคลื่อนที่สำหรับ iOS (ฉันไม่แนะนำอย่างหลัง)

ต้องสมัครสมาชิก Azure

ก่อนที่จะสามารถเชื่อมต่อกับ Cloud Shell จากศูนย์การจัดการ Teams คุณต้องลงชื่อเข้าใช้ด้วยบัญชีที่เชื่อมต่อกับการสมัครใช้งาน Azure เหตุผลก็คือเซสชัน Cloud Shell ใช้พื้นที่เก็บข้อมูล Azure สำหรับเครื่องเสมือน Linux และเพื่อเก็บข้อมูลชั่วคราวและจัดเก็บสคริปต์ที่อัปโหลด การสมัครสมาชิกครอบคลุมการใช้ที่เก็บข้อมูล Azure

ความจำเป็นในการมีบัญชีในการสมัครใช้งานไม่ใช่ปัญหาหากคุณใช้บัญชีเดียวกันสำหรับทั้งการจัดการการสมัครใช้งานและการดูแลระบบ Teams ซึ่งเป็นไปได้มากในผู้เช่ารายย่อย ในผู้เช่ารายใหญ่ คุณต้องกำหนดบทบาท Azure ที่เหมาะสมสำหรับการสมัครใช้งานบัญชีทั้งหมดที่คุณต้องการดำเนินการด้านการดูแลระบบที่เกี่ยวข้องกับการสมัครใช้งานนั้น

โดยทั่วไป ฉันจะกำหนดบทบาทผู้ประสานงาน Azure ให้กับบัญชีที่ใช้สำหรับการดูแลระบบผู้เช่า เนื่องจากเพียงพอสำหรับการใช้ทรัพยากร (เช่น พื้นที่เก็บข้อมูล) ที่เชื่อมโยงกับการสมัครใช้งาน คุณอาจพบว่าบทบาทที่แตกต่างกันของ Azure (เช่น ผู้ดูแลระบบร่วม) เหมาะกับสถานการณ์ของคุณมากกว่า รูปที่ 2 แสดงบัญชีที่มีบทบาทผู้สนับสนุนสำหรับการสมัครใช้งานในศูนย์การจัดการ Azure

การเชื่อมต่อกับทีม

หลังจากปฏิบัติตามข้อกำหนดของ Azure แล้ว เราก็สามารถเชื่อมต่อกับ Teams ได้ เอกสารของ Microsoft สำหรับ Teams PowerShell ระบุว่าคุณสามารถเรียกใช้ cmdlet Connect-MicrosoftTeams ได้โดยไม่ต้องมีพารามิเตอร์ใดๆ นี่คือสิ่งที่เกิดขึ้น:

PS /home/global> Connect-MicrosoftTeams
WARNING: Interactive authentication is not supported in this session. Using parameter '-Identity' instead.

Account   Environment Tenant                               TenantId
-------   ----------- ------                               --------
MSI@50342 AzureCloud  a562313f-14fc-43a2-9a7a-d2e27f4f3478 a562313f-14fc-43a2-9a7a-d2e27f4f3478

โปรดทราบว่าบัญชีที่ใช้คือ MSI@50342 แทนที่จะเป็นบัญชีที่ลงชื่อเข้าใช้ศูนย์การจัดการ Teams นี่เป็นบัญชีหลอกรูปแบบหนึ่งที่ใช้โดย Cloud Shell เมื่อสืบทอดการตรวจสอบสิทธิ์จากคอนโซล เช่น ศูนย์การจัดการ Teams อย่างไรก็ตาม cmdlets ที่มาจาก Skype for Business Online Connector (เลิกใช้งานในเดือนกุมภาพันธ์ 2021) ที่ขณะนี้รวมอยู่ในโมดูล Teams ใช้จุดสิ้นสุดและกลไกการรับรองความถูกต้องที่แตกต่างกัน ผลสุทธิคือหากคุณพยายามเรียกใช้ cmdlet เหล่านี้ คุณจะได้รับข้อผิดพลาด 404:

PS /home/global> Get-CsTeamsMeetingPolicy
Get-CsTeamsMeetingPolicy: The remote server returned an error: (404) Not Found.
PS /home/global> Get-CsTeamsMessagingPolicy
Get-CsTeamsMessagingPolicy: The remote server returned an error: (404) Not Found.

ทุกอย่างทำงานได้หากคุณลงชื่อเข้าใช้ Teams ด้วยข้อมูลประจำตัวสำหรับบัญชีเฉพาะ เว้นแต่ว่าจะใช้การรับรองความถูกต้องแบบหลายปัจจัย ปัญหาในการตรวจสอบสิทธิ์แบบหลายปัจจัยคือ Cloud Shell ทำงานในหน้าต่างเทอร์มินัล ดังนั้นจึงไม่มีทางแสดงกล่องโต้ตอบการลงชื่อเข้าใช้แบบโต้ตอบได้ คุณสามารถใช้การรับรองความถูกต้องขั้นพื้นฐานเพื่อลงชื่อเข้าใช้บัญชี และเมื่อเชื่อมต่อแล้ว cmdlets ทั้งเก่าและใหม่ (Skype) จะทำงานอย่างสมบูรณ์ ผู้เช่าควรรักษาความปลอดภัยให้กับบัญชีผู้ดูแลระบบทั้งหมดด้วยการตรวจสอบสิทธิ์แบบหลายปัจจัย ดังนั้นฉันไม่แนะนำวิธีนี้

PS /home/global> $O365Cred = Get-Credential

PowerShell credential request
Enter your credentials.
User: Admin@office365itpros.com
Password for user Admin@office365itpros.com: ************

PS /home/global> connect-microsoftteams -Credential $O365Cred

Account                             Environment Tenant                               TenantId
-------                             ----------- ------                               --------
Admin@office365itpros.com           AzureCloud  as62313f-14fc-43a2-9a7a-d2e27f4f3478 as62313f-14fc-43a2-9a7a-d2e27f4f3478

PS /home/global> Get-CsTeamsFeedbackPolicy

Identity                  : Global
UserInitiatedMode         : Enabled
ReceiveSurveysMode        : EnabledUserOverride
AllowScreenshotCollection : False
AllowEmailCollection      : False
AllowLogCollection        : False

วิธีแก้ไขและแนวทางที่แนะนำคือใช้การรับรองความถูกต้องของอุปกรณ์เพื่อลงชื่อเข้าใช้ Teams วิธีการนี้จะสร้างตัวระบุที่ไม่ซ้ำกันเพื่อป้อนข้อมูลลงในหน้าเว็บ

PS /home/global> Connect-MicrosoftTeams -UseDeviceAuthentication

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code C5BQJLUJ8 to authenticate.

หลังจากป้อนรหัสแล้ว ระบบจะถามว่าบัญชีใดที่จะลงชื่อเข้าใช้ จากนั้นให้ยืนยันว่าคุณต้องการใช้แอป Microsoft Graph ชื่อ MS Teams PowerShell Cmdlets (รูปที่ 3)

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่แอป Microsoft Graph ใช้การรับรองความถูกต้องของอุปกรณ์ โปรดอ่านบล็อกนี้โดย Lee Ford

การเรียกใช้ PowerShell ใน Cloud Shell

หลังจากที่คุณเชื่อมต่อโดยใช้บัญชีที่เหมาะสมแล้ว คุณสามารถเรียกใช้ cmdlet ใดๆ ที่รวมอยู่ในโมดูล Microsoft Teams PowerShell เวอร์ชันล่าสุดได้ (2.6.0 ในขณะที่เขียน) คุณยังอัปโหลดสคริปต์จากเวิร์กสเตชันไปยัง Azure เพื่อให้สคริปต์ทำงานใน Cloud Shell ได้อีกด้วย รูปที่ 4 แสดงผลลัพธ์ของการเรียกใช้สคริปต์อย่างง่ายเพื่อรายงานชื่อที่แสดงของผู้ใช้ Teams ด้วย Get-CsOnlineUser

สคริปต์ที่อัปโหลดเพื่อทำงานใน Cloud Shell จะทำงานได้อย่างราบรื่น หากคุณจำกัดไว้เพียง Teams cmdlets และคำสั่ง PowerShell พื้นฐาน เช่น ForEach-Object, Select-Object และ Where -วัตถุ. อย่างไรก็ตาม คุณอาจประสบปัญหาได้หากคุณสะกดชื่อคำสั่งไม่ครบถ้วน ตัวอย่างเช่น เป็นเรื่องปกติที่จะใช้ Sort แทน Sort-Object ในคำสั่งเช่น:

Get-Team | Sort DisplayName

Cloud Shell จะประท้วงหากคุณเรียกใช้คำสั่ง:

Get-Team | Sort DisplayName
/usr/bin/sort: cannot read: displayname: No such file or directory

ปัญหาประเภทนี้เน้นย้ำประเด็นที่ว่า Cloud Shell ไม่เหมือนกับการเรียกใช้ PowerShell เหมือนที่คุณทำตามปกติ เป็นสภาพแวดล้อมที่แยกจากกันโดยมีนิสัยแปลกๆ และข้อกำหนดของตัวเอง และหากคุณคาดว่าจะใช้ในสภาพแวดล้อมจริง คุณจะต้องเขียนโค้ดโดยคำนึงถึง Cloud Shell

นอกเหนือจากการทำให้แน่ใจว่าไวยากรณ์พื้นฐานถูกต้องแล้ว สิ่งต่างๆ จะซับซ้อนมากขึ้นเมื่อคุณต้องการใช้ cmdlets จากโมดูลอื่น ทีมอาศัยองค์ประกอบหลายอย่างที่ดึงมาจากทั่วทั้งระบบนิเวศของ Microsoft 365 และความจริงอันเลวร้ายในชีวิตการดูแลระบบก็คือ เพื่อให้ผู้ดูแลระบบทำงานให้สำเร็จ พวกเขามักจะต้องใช้ cmdlets จากโมดูลอื่นๆ เช่น SharePoint Online หรือ Microsoft Graph SDK สำหรับ PowerShell

ตัวอย่างเช่น ฉันไม่สามารถทำให้ Azure AD ทำงานใน Cloud Shell จากศูนย์การจัดการ Teams หรือศูนย์การจัดการ Microsoft 365 ได้ หมายเหตุใน GitHub อธิบายว่า Cloud Shell มีฟังก์ชันพิเศษที่จะแทนที่ฟังก์ชัน Connect-AzureAD เริ่มต้น เพื่อหลีกเลี่ยงไม่ให้ผู้ใช้ต้องป้อนข้อมูลประจำตัวอีกครั้ง บางทีนี่คือจุดที่ปัญหาอยู่

ในทางกลับกัน คุณสามารถเชื่อมต่อกับ Exchange Online PowerShell ได้โดยใช้ PowerShell ระยะไกล (ซึ่งหมายความว่าไม่มี REST cmdlets เช่น Get-ExoMailbox ที่พร้อมใช้งาน) ซึ่งใช้ได้กับ Cloud Shell เมื่อเรียกใช้จากศูนย์การจัดการ Microsoft 365 (รูปที่ 5) หรือศูนย์การจัดการ Teams

โดยรวมแล้ว ความจำเป็นต้องแน่ใจว่าโมดูลทั้งหมดที่ใช้โดยสคริปต์หรือเพื่อทำงานเชิงโต้ตอบนั้นเป็นปัจจัยที่จำกัดสำหรับ Cloud Shell

การเข้าถึงกราฟ

Cloud Shell รองรับการเรียก Graph API โดยใช้ cmdlets Intake-RestMethod หรือ Invive-WebRequest ดังนั้นนี่จึงเป็นวิธีที่มีประสิทธิภาพในการเข้าถึงและประมวลผลข้อมูลที่โมดูลไม่ทำงาน ที่คาดหวัง. รูปที่ 6 แสดงการใช้ตัวแก้ไขใน Cloud Shell เพื่อแก้ไขสคริปต์ซึ่งใช้การเรียก Graph API พร้อมผลลัพธ์ของสคริปต์ในหน้าต่างเทอร์มินัล

มีข้อจำกัดมากเกินไปสำหรับความสะดวกสบาย

ไม่ต้องสงสัยเลยว่าบางคนจะพอใจกับ Cloud Shell และใช้งานอย่างมีประสิทธิผลอย่างมาก อย่างไรก็ตาม Cloud Shell ไม่ได้ผลสำหรับฉัน การล้อเล่นกับโมดูลด้วยความหวังว่าโมดูลทั้งหมดจะทำงานไม่ได้ดูเหมือนจะไม่ใช่วิธีทำงานที่มีประสิทธิภาพเมื่อฉันมีสภาพแวดล้อมที่ยอมรับได้อย่างสมบูรณ์ระหว่างเซสชัน PowerShell มาตรฐานและ Visual Studio Code (สำหรับการพัฒนา) ทุกอย่างทำงานได้ โหลดโมดูลทั้งหมด คำสั่งทำงาน หน่วยความจำของกล้ามเนื้อจะเอาชนะข้อบกพร่องที่มีอยู่ในวิธีการตั้งค่า ฉันสงสัยว่าฉันจะเคยใช้ Cloud Shell มากนักหรือเปล่า แต่นั่นก็ไม่ใช่เหตุผลที่คุณไม่ลองและตัดสินใจด้วยตัวเอง

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