Microsoft Graph PowerShell SDK を使用した基本的な Azure AD User Account Operations

古い Azure AD コマンドレットからの移行の準備

Azure AD モジュールと MSOL モジュールに対するマイクロソフトの新しい非推奨スケジュールについて説明したとき、私は多くの反応を受けました。要約すると、2022年8月26日までに、ライセンス管理アクションを実行するスクリプトを更新する必要があります。他のコマンドレットは、Microsoft が 2022 年後半または 2023 年初頭にモジュールを廃止した後も動作を続けます。ただし、これらはサポート対象外となり、Azure AD ユーザー アカウントの管理など、管理プロセスを自動化するために使用される PowerShell スクリプトの優れた基盤にはなりません。

あと約 9 か月で、テナントがスクリプトのインベントリとアップグレードを行う必要があることは明らかです。私が受け取った反応の1つは、PowerShellに精通しておらず、一部のスクリプトの所有権を継承している可能性のある人々を支援するための情報が不足しているということでした。私の回答は、マイクロソフトが 2016 年に Azure AD モジュールを立ち上げたときや、Ignite 2019 で Exchange Online 管理の REST ベースのコマンドレットをリリースしたときと同じように、コミュニティが時間の経過とともに例を公開するということです。これが真実であることを願いましょう。

Practical365.com で、私は比較する 新しい Azure AD ユーザー アカウントを作成し、そのアカウントにライセンスを割り当てる 古い Azure AD モジュールと Microsoft Graph PowerShell SDK の両方を使用します。この記事では、いくつかの基本的なユーザーアカウント管理アクションを検討します。

コネ

Microsoft Graph PowerShell SDK (SDK) を使用するための基本は、接続することです。できます 対話型接続 (委任されたアクセス) または 証明書ベースの認証 (アプリケーションアクセス)。SDK コマンドレットを Azure Automation Runbooks.最も簡単な方法は、実行することです コネクト-マグネシウムグラフ 対話式に、PowerShell にサインインに使用したアカウントを使用してグラフにサインインします。

スコープ

SDK コマンドレットは、Microsoft Graph API と対話します。SDK モジュールと Azure AD モジュールの大きな違いは、SDK によって次のセットを要求するように強制されることです。 グラフ権限 あなたが使用したい。SDK は、サービス プリンシパルを使用してアクセス許可を保持し、時間の経過と共に、そのアクセス許可を保持します。 サービス プリンシパルのアクセス許可が過度に高くなることがあります.それは目が離せないことです。

この例では、使用するグラフ権限の配列を定義し、接続します。SDK サービス プリンシパルがまだ保持していないアクセス許可を要求すると、同意を求める管理者プロンプトが表示されます。

$RequiredScopes = @("Directory.AccessAsUser.All", "Directory.ReadWrite.All", "User.ReadWrite.All", “User.Read.All”)
Connect-MgGraph -Scopes $RequiredScopes

Welcome To Microsoft Graph!
Select-MgProfile Beta

Azure AD ユーザー アカウントのプロパティの更新

を使用して Sue.Ricketts@Office365itpros.com アカウントを作成したと仮定しましょう。 新規 – MgUser コマンドレット as この資料の説明 アカウントのユーザー識別子を$UserId変数に格納します。

$UserId = (Get-MgUser -UserId Sue.Ricketts@office365itpros.com).Id

Azure AD ユーザー アカウントのプロパティを更新するには、 更新-MgUser コマンドレット。

Update-MgUser -UserId $UserId -JobTitle "Senior Editor" -State NY

Azure AD ユーザー アカウントのマネージャーは、単にプロパティを更新するのではなく、参照によって (自分のアカウントに対して) 更新されます。ユーザアカウントのマネージャを更新するには、 Set-MgUserManagerByRef マネージャーのアカウントの識別子を変数に格納した後のコマンドレット:

$ManagerId = (Get-MgUser -UserId Terry.Hegarty@office365itpros.com).Id
Set-MgUserManagerByRef -UserId $UserId `
   -AdditionalProperties @{
     "@odata.id" = "https://graph.microsoft.com/v1.0/users/$ManagerId" }

マネージャの更新が成功したことを確認するには、マネージャの詳細(辞書オブジェクトに展開)を取得し、必要なプロパティを取得する必要があります。

$ManagerData = Get-Mguser -UserId $UserId -ExpandProperty Manager
$ManagerData.Manager.AdditionalProperties['displayName']
Terry Hegarty

これに対して、Azure AD コマンドレットを使用する同等のものは次のとおりです。

Set-AzureADUserManager -ObjectId $UserId -RefObjectId $ManagerId
Get-AzureADUserManager -ObjectId $UserId | Select DisplayName

明らかに、マイクロソフトはこの操作を Azure AD と同等の操作よりも複雑にしました。コードの複雑さを隠し、スクリプトを更新するときに摩擦を生じさせない簡単なコマンドレットを提供するといいでしょう。

ユーザー アカウントのプロパティを更新するもう 1 つの方法は、 Invoke-MgGraphRequest コマンドレット: グラフ API クエリを実行します。このコマンドレットの利点は、SDK コマンドレットで何かを行う方法が見つからない場合は、Microsoft Graph のドキュメントを参照し、いくつかのサンプル コードを見つけて、それを実行または転用できることです。

この例では、更新するプロパティを保持するハッシュテーブルを作成し、テーブルをJSONオブジェクトに変換して、実行されるPATCHクエリに渡します。 Invoke-MgGraphRequest:

$Parameters = @{
   JobTitle = "Managing Editor, Periodicals"
   State = "Vermont"
   OfficeLocation = "Burlington" } | ConvertTo-Json
Invoke-MgGraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/users/Sue.Ricketts@office365itpros.com" -Body $Parameters -ContentType "application/json; charset=utf-8"

Azure AD ユーザー アカウントを削除する

削除 – MgUser コマンドレットは、Azure AD ユーザー アカウントを論理的に削除し、Azure AD の削除済みアイテム コンテナーに移動します。このコンテナーは、Azure AD がオブジェクトを完全に削除するまで 30 日間保持されます。コマンドレットは非常に単純で、そうではありませんユーザーアカウントの削除に進む前に、確認を求めるプロンプトを表示します。

Remove-MgUser -UserId $UserId

論理的に削除されたアカウントを復元する必要がある場合は、 リストア – MgUser コマンドレットを実行し、復元するアカウントのオブジェクト識別子を渡します。論理的に削除されたユーザー アカウントのセットを一覧表示する方法については、この記事を参照してください。

Restore-MgUser -UserId $UserId

私はいくつかの問題を経験しました リストア – MgUser 私がマイクロソフトに報告したSDKの1.9.3リリースのコマンドレット。基本的に、コマンドレットはこのリリースでは機能しません。私はバグがすぐに修正されると確信しています。

Azure AD ユーザー アカウントの取得

私たちはすでにどのように見てきました Get-MgUser コマンドレットは、個々のユーザー アカウントの情報を取得します。また、アカウントのセットも取得します。テナント内のすべてのアカウントを取得するには、次のコマンドを実行します。

[array]$Users = Get-MgUser -All

私はいつも、オブジェクトのセットのターゲットとして使用される変数が配列であることを指定します。これにより、次のように、返されるオブジェクトの数を簡単に見つけることができます。

Write-Host $Users.Count “Azure AD accounts found”

グラフ API クエリとは異なり、 Get-MgUser コマンドレットは、クエリのデータページネーションを処理し、使用可能なすべてのオブジェクトを取得します。

All スイッチを指定しない場合、コマンドレットは最初の 100 個のアカウントを取得します。Top パラメーターを使用して、最大 999 個までの特定の数のアカウントを取得できます。

[array]$Top500 = Get-MgUser -Top 500

Filter パラメーターは、サーバー側のフィルター処理を使用して、返されるデータの量を制限します。たとえば、テナント内のすべてのゲスト アカウントを検索する方法は次のとおりです。

[array]$Guests = Get- MgUser -Filter "usertype eq 'Guest'" -All

このフィルターは、使用場所 (Microsoft 365 サービスの場合) が米国であるアカウントを返します。

Get-MgUser -Filter "usagelocation eq 'US'"

フィルター内のプロパティを組み合わせることができます。例えば:

Get-MgUser -Filter "usagelocation eq 'US' and state eq 'NY'"

もう 1 つの興味深いフィルターは、特定の日付範囲で作成されたアカウントを検索することです。このコマンドは、2022 年 1 月 1 日から Matrch 24 の間に作成されたすべてのテナント非ゲスト アカウントを検索します。日付の末尾の Z に注意してください。グラフは、Z が存在しない場合、日付を有効なものとして扱いません。

Get-MgUser -Filter "createdDateTime ge 2022-01-01T00:00:00Z and createdDateTime le 2022-03-24T00:00:00Z and usertype eq ‘Member’"

GitHub による SDK の問題のサポート

上記の例は、Azure AD ユーザー アカウントの基本的な管理を実行するための SDK コマンドレットを理解する上で役立つことを願っています。SDK コマンドレットを使用するようにスクリプトを変換するときに問題が発生した場合は、問題を報告できます (または、現在の既知の問題を参照できます)。 GitHub で.ハッピーマイグレーション!

未分類

Posted by admin