Weboldal keresés

A Cloud Shell használata a Microsoft Teams Felügyeleti Központból


De jobb választás a sima régi PowerShell

Az MC289245 számú üzenetközpont-értesítésben (2021. október 4., a Microsoft 365 ütemtervének 82708-as tétele) bejelentették, hogy az Azure Cloud Shell munkamenet meghívása a Teams felügyeleti központból már elérhető a bérlőkben. Úgy tűnik, az ötlet az, hogy lehetővé tegyük a Teams-rendszergazdák számára, hogy a Microsoft Teams PowerShell-modul parancsmagjaival hajtsanak végre feladatokat anélkül, hogy bármit is telepíteniük kellene egy munkaállomásra. Amint azt alább tárgyaljuk, a Cloud Shell biztosan tudja futtatni a Teams-parancsmagokat, de a megvalósítás által támasztott korlátozások olyanok, hogy nem javaslom ennek a megközelítésnek a használatát, hacsak nem feltétlenül muszáj.

A Cloud Shell futtatása

Új Cloud Shell-munkamenet indításához kattintson a héj ikonra a böngészősávban. Megnyílik egy ablaktábla a felügyeleti központ alatt, csatlakozik az Azure-hoz, és létrehoz egy felhőmeghajtót. A színfalak mögött az Azure új PowerShell Core-példányt hoz létre, amely Linux virtuális gépen fut egy Hyper-V gazdagépen. Sok tekintetben a dolgok nem sokat változtak azóta, hogy Vaszil Micsev három évvel ezelőtt megvizsgálta a Cloud Shellt.

Miután csatlakozott egy shell-munkamenethez, a Connect-MicrosoftTeams parancsmag futtatásával csatlakozhat a Teamshez, és betöltheti a parancsmagokat a modulból. A modul betöltése után futtathatja a parancsmagokat (1. ábra).

Nem csak a Teams Felügyeleti Központ

Ugyanez a funkció elérhető, ha Cloud Shell-munkamenetet indít a Microsoft 365 felügyeleti központból. Más szóval, a hírek nem arról szólnak, hogy a Cloud Shellt a Teams adminisztrációs központjából indíthatja el. Inkább arról van szó, hogy a Microsoft megtette a tervezést annak érdekében, hogy a Teams-parancsmagokat elérhetővé tegye a Cloud Shell számára, függetlenül attól, hogy honnan hoz létre egy Cloud Shell-munkamenetet. Futtathattam Teams-parancsmagokat a Cloud Shellben a Microsoft 365 felügyeleti központból, az Azure Portalból, a Teams felügyeleti központból és az iOS-hez készült Azure mobilalkalmazásból (ez utóbbit nem javaslom).

Azure-előfizetés szükséges

Mielőtt csatlakozhatna a Cloud Shellhez a Teams felügyeleti központjából, be kell jelentkeznie egy Azure-előfizetéshez kapcsolódó fiókkal. Ennek az az oka, hogy a Cloud Shell-munkamenetek Azure-tárhelyet használják a Linux virtuális géphez, valamint ideiglenes adatok tárolására és feltöltött szkriptek tárolására. Az előfizetés az Azure Storage használatára vonatkozik.

A fiók előfizetéshez való szükségessége nem jelent problémát, ha ugyanazt a fiókot használja az előfizetések kezeléséhez és a Teams adminisztrációjához, ami egy kis bérlőnél nagyon is lehetséges. Nagyobb bérlőkben megfelelő Azure-szerepkört kell hozzárendelnie egy előfizetéshez minden olyan fiókhoz, amelyen az előfizetéssel kapcsolatos adminisztrációs műveleteket szeretne végrehajtani.

Általában az Azure-koordinátor szerepkört rendelem hozzá a bérlői adminisztrációhoz használt fiókokhoz, mivel ez elegendő az előfizetéshez kapcsolódó erőforrások (például tárhely) használatához. Előfordulhat, hogy egy másik Azure-szerepkör (például a társrendszergazda) jobban megfelel az Ön körülményeinek. A 2. ábra a Közreműködői szerepkörrel rendelkező fiókokat mutatja egy előfizetéshez az Azure felügyeleti központban.

Csatlakozás a Teamshez

Az Azure-követelmények teljesítése után csatlakozhatunk a Teamshez. A Microsoft Teams PowerShellhez készült dokumentációja azt írja, hogy a Connect-MicrosoftTeams parancsmagot paraméterek nélkül is futtathatja. Íme, mi történik:

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

Vegye figyelembe, hogy a használt fiók az MSI@50342, nem pedig a Teams felügyeleti központjába bejelentkezett fiók. Ez a pszeudofiók egy formája, amelyet a Cloud Shell használ, amikor a hitelesítést örökli egy konzoltól, például a Teams felügyeleti központjától. A Skype for Business Online Connector-ből (2021 februárjában megszűnt) származó parancsmagok azonban, amelyek most szerepelnek a Teams modulban, más végpontot és hitelesítési mechanizmust használnak. A nettó hatás az, hogy ha megpróbálja futtatni ezeket a parancsmagokat, 404-es hibaüzenetet kap:

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.

Minden működik, ha egy adott fiókhoz tartozó hitelesítési adatokkal jelentkezik be a Teamsbe, kivéve, ha az többtényezős hitelesítést használ. A többtényezős hitelesítés problémája az, hogy a Cloud Shell terminálablakban fut, így nincs mód az interaktív bejelentkezési párbeszédpanel megjelenítésére. Alapszintű hitelesítéssel bejelentkezhet egy fiókba, és csatlakozás után az új és a régi (Skype) parancsmag is tökéletesen fut. A bérlőknek minden rendszergazdai fiókot többtényezős hitelesítéssel kell biztosítaniuk, ezért nem javaslom ezt a megközelítést.

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

A megoldás és az ajánlott megközelítés az eszközhitelesítés használata a Teamsbe való bejelentkezéshez. Ez a módszer egyedi azonosítót generál, amelyet be kell vinni egy weboldalba.

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.

A kód bevitele után a rendszer megkérdezi, hogy melyik fiókkal kell bejelentkezni, majd meg kell erősítenie, hogy az MS Teams PowerShell parancsmagok nevű Microsoft Graph alkalmazást kívánja használni (3. ábra).

További információért arról, hogy a Microsoft Graph alkalmazások hogyan használják az eszközhitelesítést, olvassa el Lee Ford blogját.

A PowerShell futtatása a Cloud Shellben

Miután megfelelő fiókkal csatlakozott, futtathatja a Microsoft Teams PowerShell modul legújabb verziójában (a cikk írásakor 2.6.0) található parancsmagok bármelyikét. Szkripteket is feltölthet egy munkaállomásról az Azure-ba, hogy Cloud Shellben futhassanak. A 4. ábra egy egyszerű szkript futtatásának eredményét mutatja a Teams-felhasználók megjelenített nevének jelentésére a Get-CsOnlineUser segítségével.

A Cloud Shellben való futtatáshoz feltöltött szkriptek gond nélkül futnak, ha a Teams-parancsmagokra és az olyan alapvető PowerShell-parancsokra korlátozza őket, mint a ForEach-Object, Select-Object és a Where -Tárgyt. Azonban problémákat találhat, ha nem írja le teljesen a parancsneveket. Például gyakori a Rendezés használata a Sort-Object helyett az olyan parancsokban, mint:

Get-Team | Sort DisplayName

A Cloud Shell tiltakozik, ha futtatja a következő parancsot:

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

Ez a fajta akadozás aláhúzza azt a tényt, hogy a Cloud Shell nem ugyanaz, mint a PowerShell futtatása, ahogyan azt általában tenné. Ez egy külön környezet, megvannak a maga furcsaságai és követelményei, és ha éles környezetben szeretné használni, akkor a Cloud Shell szem előtt tartásával kell kódot írnia.

Az alapvető szintaxis helyességének biztosításán túl a dolgok bonyolultabbá válnak, ha más modulokból származó parancsmagokat kell használnia. A Teams a Microsoft 365 ökoszisztémájából származó több összetevőre támaszkodik, és az adminisztratív élet kemény ténye az, hogy a rendszergazdáknak a munkájuk elvégzéséhez gyakran más modulokból, például a SharePoint Online-ból vagy a Microsoft Graph SDK for PowerShellből származó parancsmagokat kell használniuk.

Például nem tudtam az Azure AD-t a Cloud Shellben működni sem a Teams felügyeleti központból, sem a Microsoft 365 felügyeleti központból. A GitHubban található megjegyzés elmagyarázza, hogy a Cloud Shell egy speciális funkcióval rendelkezik az alapértelmezett Connect-AzureAD függvény felülbírálására, hogy elkerülje a felhasználóknak a hitelesítő adatok újbóli megadását. Talán itt van a probléma.

A másik oldalról a Remote PowerShell segítségével csatlakozhat az Exchange Online PowerShellhez (ami azt jelenti, hogy a REST parancsmagok, például a Get-ExoMailbox egyike sem érhető el). Ez akkor működik a Cloud Shell esetében, ha a Microsoft 365 felügyeleti központjából (5. ábra) vagy a Teams felügyeleti központjából hívják meg.

Összességében a Cloud Shell számára korlátozó tényező annak szükségessége, hogy megbizonyosodjon arról, hogy a szkriptek által használt összes modul vagy az interaktív feladatok végrehajtása.

Grafikon hozzáférés

A Cloud Shell támogatja a Graph API-hívásokat az Invoke-RestMethod vagy az Invoke-WebRequest parancsmag használatával, így ez is egy életképes módszer az adatok elérésére és feldolgozására ott, ahol a modulok nem működnek várható. A 6. ábra a Cloud Shell szerkesztőjének használatát mutatja be egy olyan szkript módosítására, amely Graph API-hívást használ a szkript eredményeivel a terminálablakban.

Túl sok korlát a kényelemhez

Kétségtelen, hogy egyesek örülni fognak a Cloud Shellnek, és nagyon produktív módon használják. A Cloud Shell azonban egyszerűen nem működik számomra. Nem tűnik hatékony módszernek a modulokkal való vacakolni abban a reményben, hogy mindegyik működni fog, amikor tökéletesen elfogadható környezettel rendelkezem a szabványos PowerShell-munkamenetek és a Visual Studio Code (fejlesztési célú) között. Minden működik. Minden modul betöltődik. A parancsok futnak. Az izommemória kiküszöböli a beállítás működésében meglévő hibákat. Kétlem, hogy valaha is sokat fogom használni a Cloud Shellt, ha egyáltalán használom. De ez nem ok arra, hogy ne próbálja ki, és ne döntse el saját magát.

Kapcsolódó cikkek