1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Microsoft Graph API & Powershell】Connect-MSGraphでのログインをCUI化

Last updated at Posted at 2020-03-17

前提

Connect-MSGraphでのサインインをCUI化する方法を書いています。
通常Connect-MSGraphコマンドだけを単体で実行するとブラウザ経由で管理者権限でのGUIサインインの入力を求められます。その手順をCUIで実現することが目的です。

Connect-MSGraphは動作が不安定で、同じ環境で複数回実行しても成功することと失敗することがあります。そのため、ログインが成功するまでwhileでループさせて、try-catch文でエラーをキャッチした場合はリトライし、成功するまでサインインを繰り返す方式を取っています。

Microsoft側のサーバー負荷やAPI回数制限のことを考慮して再接続を試すまでに3秒インターバルを置いています。

また、パスワードをコード内にベタ書きするのはセキュリティ的に望ましくないため、暗号化パスワードファイルをあらかじめ生成しておいて、ログインの際にそのファイルの中身を取得する方法をとっています。

Connect-MSGraphがIntune-PowerShell-SDKのメソッドなので当然ですが、Intune-PowerShell-SDKが実行PCにインストールされていないと動きません。

また、本記事はIntuneSDKのConnect-MSGraphメソッドについてのものですが、Connect-AzureADなどでも流用できるかと思います。

開発歴一年くらいの人間が書いてるのでツッコミ歓迎します。

■参考資料

・microsoft / Intune-PowerShell-SDK(公式ドキュメント)
https://github.com/microsoft/Intune-PowerShell-SDK
 IntuneSDKのGitHubです。SDKのインストール手順も記載されています。
 ※インストールがエラーになる場合、Powershellの実行ポリシーが変更されてるかもチェックしてください。

・パスワードをスクリプトに埋め込むなんてありえない!Tableau ServerのTSMコマンド用スクリプトへ移行する方法
 Graph APIに関する記事ではありませんが、Powershellでのパスワード暗号化ファイルの作成手順として流用しています。
https://dev.classmethod.jp/business/bigdata/20181017-tableau-server-migrate-tsm-command-for-regacy-scripts/

・Microsoft Graph 調整ガイド(公式ドキュメント)
 APIリクエストの回数制限について記載されています。
https://docs.microsoft.com/ja-jp/graph/throttling

事前準備

暗号化パスワードファイルの作成

$FilePathはパスワードファイルを生成したいパスに変更してください。

\Users\administrator\Desktop\password.sec"
$Credential = Get-Credential
$Credential.Password | ConvertFrom-SecureString | Set-Content $FilePath```

上記を実行するとアカウントとパスワードが生成されるので、Graph APIで使用するアカウントとパスワードを入力してください。
サインイン後、指定したパスに暗号化されたパスワードファイルが生成されます。

※他のPCで作成したパスワードファイルは流用できないようなので、
 Powershellの実行PCが変わったときはパスワードファイルの再作成が必要です。

# サインイン

サインイン用アカウントを指定

$adminUPN = "test@xxxx.co.jp"

パスワードファイルのパスを指定

$adminPwd = Get-Content "C:\Users\administrator\Desktop\password.sec" | ConvertTo-SecureString

$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($adminUPN, $adminPwd)
while($true){
try {
# 3秒待つ
Start-Sleep -s 3
Connect-MSGraph -PSCredential $creds
return;
}
catch
{}
}

成功後、Invoke-MSGraphRequestメソッドが使えるようになります。




以上
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?