手元のPowerShellを、ガードレール付きのセルフサービスに。
RealmJoinは厳選した175本のRunbookライブラリを自社のAzure Automationアカウントに同期し、スクリプトごとにフォームを組み立て、誰が何を実行できるかを決めます。ジョブは必ずログを残します。
- 175本のRunbook、オープンソース
- 自社のAzureサブスクリプションで実行
- 対象グループ単位まで指定できる権限
- 毎月追加されるRunbook
自分で書かなくていい175本のRunbook
ライブラリはGitHubでオープンソースとして公開されています。RealmJoinがそれを自社のAutomationアカウントに同期し、毎月出るリリースに合わせて最新に保ち、自作のRunbookもその隣で実行できます。
| Runbook |
|---|
| スケジュール実行Cleanup Autopilot devices |
| スケジュール実行Delete stale devices |
| スケジュール実行Auto-approve driver updates |
| スケジュール実行Notify users about low disk space |
| スケジュール実行Report devices without primary user |
| スケジュール実行Report expiring application credentials |
| スケジュール実行Monitor pending EPM requests |
| スケジュール実行Sync MFA-secure users to group |
| Backup Conditional Access policies |
| Notify changed CA policies |
| List inactive users |
| Invite external guest users |
| Add shared mailbox |
| Export all Intune devices |
| Check SharePoint and OneDrive status |
| Offboard user permanently |
| Offboard user temporarily |
| Create temporary access pass |
| Reset MFA |
| Revoke or restore access |
| Confirm or dismiss risky user |
| Convert to shared mailbox |
| Delegate full access |
| Set out of office |
| Set Teams Phone |
| Assign Windows 365 |
| Resize Windows 365 |
| Check Intune enrollment readiness |
| Assign groups by template |
| List sign-in events |
| Wipe device |
| Outphase device |
| Rename device |
| Set primary user |
| Wipe managed app data |
| Check device compliance |
| Isolate or release device |
| Restrict or release code execution |
| Check Defender status |
| Show BitLocker recovery key |
| Show FileVault recovery key |
| Show LAPS password |
| Reset mobile device PIN |
| Toggle drain mode |
| Restart host |
| Add or remove user |
| Add or remove owner |
| Add or remove nested group |
| Rename group |
| Change visibility |
| List all members |
| List user devices |
| Remove group |
| Enable or disable external mail |
| Show or hide in address book |
| Archive team |
| スケジュール実行Unenroll updatable assets |
各スコープからいくつかのRunbookを抜粋しています。組織、96本:General 39、Devices 19、Security 15、Mail 10、Applications 9、Collaboration 3、Phone 1。
ユーザー、43本:Mail 13、General 12、Security 9、Phone 5、User info 3、AVD 1。
デバイス、22本:General 12、Security 8、AVD 2。
グループ、14本:General 9、Mail 2、Devices 2、Teams 1。
GitHubから同期
既定では
productionブランチから取得し、rjgit-の接頭辞を付けて、ライブラリに合わせて追加、更新、削除します。モジュールも自動で用意
必要なモジュールは各スクリプトから読み取り、依存関係も含めてPowerShell Galleryからインストールします。
マネージドランタイム
AzとAzure CLIを備えたPowerShell 7.4の環境を、自社のAutomationアカウントに用意します。
フォームは自動で組み上がります
RealmJoinは各スクリプトのパラメーターブロックとコメントベースのヘルプを読み取ります。Use-RJInterfaceの注釈があれば、パラメーターはMicrosoft Graphと連動したユーザー、グループ、デバイスのピッカーや、数値、日付、テキストの入力欄、あるいはテナント設定になります。ValidateSetはドロップダウンになります。
- 必須項目はジョブの開始前に検証されます
- テナントごとに、任意の項目を非表示、改名、並べ替え、初期値設定できます
- 条件付きルール:ある選択肢を選ぶと、ほかの項目が変わります
- 監査証跡のため、実行者の名前が渡されます
RealmJoinがスクリプトから生成する画面です。説明のため、ライブラリの2本のRunbookのパラメーターをまとめています。
param ( [Parameter(Mandatory = $true)] [ValidateScript( { Use-RJInterface -Type Graph -Entity User -DisplayName "User" } )] [String] $UserName, [ValidateScript( { Use-RJInterface -Type Graph -Entity User -DisplayName "Who should step in as group/resource owner?" } )] [String] $ReplacementOwnerName, [bool] $ReplaceManagerReferences = $false, [ValidateSet("WhatIf (report only)", "Delete")] [string] $DeleteMode = "WhatIf (report only)")
誰が何を実行できるかを、対象単位で
Runbookの権限は、テナントごとに1つのJSONドキュメントで定義します。ロールはEntraのグループに対応付け、Runbookを名前のパターンで許可します。対象グループでロールをさらに絞れるので、一次サポートにはスウェーデンのローカル管理者パスワードだけを表示させる、といった指定ができます。スケジュール実行には専用の許可パターンと拒否パターンがあります。
- ワイルドカードでまとまった範囲をまとめて有効化、無効化できます
- Runbook単位だけでなく、対象グループ単位でもロールを制限できます
- コメントと末尾のカンマを許容するので、読みやすさを保てます
{ "EnabledRunbookPatterns": [ "rjgit-*_mail_*", "rjgit-*_security_*" ], "DisabledRunbookPatterns": [ "*password*" ], "Roles": { "LAPSAdmin": { "Groups": [ /* CFG - RealmJoin Admin */ "724c288d-…" ], "AllowedRunbookPatterns": [ "rjgit-*_security_*" ] }, "DeviceAdmin": { "Groups": [ /* Sweden Supporters */ "52fcd199-…" ], "AllowedRunbookPatterns": [ "rjgit-device_*" ] } }, "TargetEntityGroups": { /* Sweden Users: LAPS only for Sweden Supporters */ "ca03f227-…": { "RestrictRoles": { "LAPSAdmin": [ "52fcd199-…" ] } } }, "SchedulingDisabledRunbookPatterns": [ "rjgit-device_*" ]}
自社のタイムゾーンで動くスケジュール
毎時、毎日、毎週、毎月のスケジュールが最初から用意されていて、いずれも自社テナントのタイムゾーンで動きます。独自のスケジュールも追加できます。
- スケジュール実行のジョブを手動実行と並べて表示
- Runbookのパターン単位でスケジュール実行を許可、禁止
無人実行を前提とした作り
ライブラリのうち34本がそのために作られています。クリーンアップ、レポート、監視など、手で起動する必要のない処理です。
- レポートはメール、または期限付きのダウンロードリンクで
- スケジュール実行はすべてジョブ履歴と自社のLog Analyticsワークスペースに記録
オンプレミスにも対応 Preview
ファイル共有、Active Directoryの属性、レガシーアプリなど、オンプレミスに残る処理もあります。名前が_hybridで終わるRunbookは、自社ネットワーク内のHybrid Runbook Workerグループ上で実行できます。起動するときにワーカーグループを選ぶだけで、ほかは変わりません。
プレビュー期間中はRealmJoinのステージングポータルで利用できます。
段階展開して結果を測れる修復スクリプトのライブラリ
RealmJoinは公開GitHubリポジトリから厳選したIntuneの修復スクリプトを毎晩同期します。サブスクライブしてステージングし、スケジュールに沿って管理対象グループへ配布すれば、デバイスごとの検出結果と修復結果を確認できます。1台ですぐ実行したい場合は、デバイスページから起動できます。
- 未管理、管理対象、ステージング済み、配布済み、非推奨の状態が一目でわかります
- 検出用と修復用のソースを並べて表示します
- 上流で削除されたスクリプトも、使っている間は残ります
それ以外の人のためのフォーム
すべての依頼がRunbookで片付くわけではありません。セルフサービスフォームは翻訳ファイル付きのJSONスキーマから作られ、従業員には社内フォームとして表示され、送信内容はメールまたはWebhook、たとえばITSMツールやTeamsのフローに送られます。回答はすべて履歴に残ります。
- 翻訳ファイルによる多言語対応
- フォームごとにメールの送信先と、任意のWebhookを指定
- 管理者にはフォーム履歴、ユーザーページには回答を表示
どこからでもRunbookを起動
Customer APIはRunbookを同期実行またはバックグラウンド実行し、ジョブの状態、出力テキスト、出力ストリーム、例外を返します。ITSMからは、退職手続きを依頼したチケットそのもので処理を実行できます。
実行して待機
ジョブの終了時に返る同期呼び出しで、1時間までのジョブに使えます。
バックグラウンドで開始
すぐにジョブIDを返すので、必要なときに状態を取得します。
ジョブの状態
待機中、実行中、完了、失敗。
出力
出力テキストのみ、または全出力ストリーム。
例外
ジョブが失敗したときの例外テキスト。
毎晩のログエクスポート
完了したジョブは23:00に自社のLog Analyticsワークスペースへ送られます。Customer APIリファレンス
スクリプトフォルダーは、もう不要に。
Azure Automationを接続してライブラリを同期し、適切なガードレールを設けたうえで、最初のRunbookをヘルプデスクに渡してください。