この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft EntraのClient CredentialsとMicrosoft Graphのスロットリング仕様を確認し、旧記事の固定初期パスワード、根拠のない「3〜5倍高速化」、無制御な並列書き込みを修正しました。検証ステータス:✅ Microsoft公式認証・Graph throttling仕様確認済み
PowerShellからMicrosoft Graph REST APIを直接呼ぶ方法は、SDKを導入しにくい環境や小さな自動処理で有効です。ただし、大量処理では「速く並列化する」より先に、認証、再試行、ログ、重複防止を決めます。
Client Credentialsはバックグラウンド処理向け
ユーザー操作なしで動くサービスではOAuth 2.0 Client Credentials Flowを利用できます。Microsoftは、可能なら共有シークレットより証明書やFederated Credentialを使う方法も案内しています。資格情報をソースコードへ埋め込んではいけません。
429ではRetry-Afterを優先する
Microsoft Graphは負荷制御のためHTTP 429 Too Many Requestsを返します。レスポンスにRetry-Afterがある場合、その秒数を待って再試行するのが公式推奨です。
function Invoke-GraphWithRetry {
param([string]$Uri, [hashtable]$Headers)
for ($attempt = 1; $attempt -le 5; $attempt++) {
try {
return Invoke-RestMethod -Uri $Uri -Headers $Headers -Method Get
}
catch {
$status = [int]$_.Exception.Response.StatusCode
if ($status -ne 429 -or $attempt -eq 5) { throw }
$retryAfter = $_.Exception.Response.Headers.RetryAfter.Delta.TotalSeconds
if (-not $retryAfter) { $retryAfter = [math]::Pow(2, $attempt) }
Start-Sleep -Seconds ([int][math]::Ceiling($retryAfter))
}
}
}
実際のPowerShell/.NET版によって例外オブジェクトの形は異なるため、運用環境でRetry-After取得部分をテストします。
大量更新で必要な設計
- 入力行ごとに一意な処理IDを持たせ、再実行しても二重作成しない。
- 成功・失敗・HTTPステータス・request-idをログへ残す。
ThrottleLimitを固定の高速化値として扱わず、429発生率を見て調整する。- ユーザー作成では固定の初期パスワードをコードに書かない。
- 必要なGraph Application Permissionだけを管理者同意する。
公式情報
- Microsoft Learn ― OAuth 2.0 client credentials flow
- Microsoft Learn ― Microsoft Graph throttling guidance
- Microsoft Graph ― Create user
この記事の更新履歴
- 2026-09-14 追加:Retry-After優先の再試行、再実行性、資格情報保護の設計を追加。
- 2026-09-14 変更:速度優先の並列処理例から、Graphの制限に従う安全な一括処理へ変更。
- 2026-09-14 削除:内部style_prompt、本文H1、固定TemporaryPassword、根拠のない3〜5倍高速化、単純な大量並列POST例を削除。

