社内SEなら知っておきたいExchange Onlineのメンテナンスを自動実行する方法

Office365

はじめに

社内SEなら人事異動や組織変更、名称変更、メーリングリストの作成・変更など、毎回毎回変更が発生するたびに手作業でExchangeOnlineをメンテナンスをするのは手間なので、人事システムから抽出・加工したCSVをインプットファイルとしてExchange Onliine PowerShellを自動実行したいと考えると思います。その実装方法を本記事で紹介します。

全般的なポイント

ポイントは以下のとおりです。

全般的なポイント
  • 実行環境は24時間稼働するサーバとする
  • スケジュールまたはトリガー起動させるためにタスクスケジューラを利用する
  • 必要に応じてタスクスケジューラを実行するためのWindowsバッチを作成する
  • サインインは非対話型サインインを実装する
  • 実行時のパスワードはセキュリティの観点でps1コマンドレットに直接埋め込まず、暗号化されたパスワードファイルを用いる

タスクスケジューラの設定

実装時のポイント
  • タスクの実行に使うアカウントは管理者アカウントで「ユーザがログオンしているかどうか関わらず実行する」を指定する
  • 操作はPowerShellの実行はご作法をどおりとする
タスクの実行に使うユーザ アカウント管理者アカウント
ユーザがログオンしているかどうかにかかわらず実行する(W)チェック
全般タブ
プログラム/スクリプト(P)%Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加(オプション)(A)-ExecutionPolicy Bypass <実行したいps1ファイルの絶対パス>
例):
-ExecutionPolicy Bypass D:\@scripts\xxx.ps1
操作タブ

Windowsバッチでのタスク実行方法

タスクを他アプリやジョブコントローラーから実行する際、WindowsバッチでPowerShellを起動させる必要がある場合は、タスクスケジューラをWindowsバッチで動かすという方法もあります。なお実行アカウントがドメインかローカルかを明示する必要があります。基本はドメイン参加していると思いますので、それを前提としてます。

schtasks /run /tn <実行したいタスク名> /s <対象サーバ> /u <実行アカウント> /p<実行アカウントのパスワード> 

例)
schtasks /run /s testsv /u domain\testuser /p testuser /tn <実行したいタスク名>

暗号化されたパスワードファイルの作成方法

非対話型サインインを実現するために、PowerShellにパスワードを埋め込みたくない場合は、暗号化されたパスワードファイルを作成します。なおこのパスワードファイルは、パスワードファイルを作成したマシン・実行アカウントでのみ有効なため、例えば他サーバにコピーして使いまわすことはできません。

$dir = <作成したいディレクトリ>\xxxx.pass
$Cred = Get-Credential
$Cred.Password | ConvertFrom-SecureString | Set-Content $dir

例)
$dir = d:\tetemana\tetemana.pass
$Cred = Get-Credential
$Cred.Password | ConvertFrom-SecureString | Set-Content $dir

非対話型サインインでのExchange Onlineへの接続

ここまで準備できましたら、後は接続するのみです。

$User = <Office365の管理者アカウント>
$Passwordfile = <パスワードファイルの絶対パス>
$UserCredential = Get-Content $Passwordfile | ConvertTo-SecureString
$Cred = New-Object System.Management.Automation.PSCredential $User,$UserCredential
Connect-ExchangeOnline -Credential $Cred -ShowProgress $true

Disconnect-ExchangeOnline -Confirm:$false
例)
$User = "admin@test.onmicrosoft.com"
$Passwordfile = "d:\tetemana\tetemana.pass"
$UserCredential = Get-Content $Passwordfile | ConvertTo-SecureString
$Cred = New-Object System.Management.Automation.PSCredential $User,$UserCredential
Connect-ExchangeOnline -Credential $Cred -ShowProgress $true

Disconnect-ExchangeOnline -Confirm:$false

まとめ

以上で、『社内SEなら知っておきたいExchange Onlineのメンテナンスを自動実行する方法』でした。面倒な人事異動対応は自動実行で効率化すべき作業だと思うので、実装して損はないと思います。

コメント

タイトルとURLをコピーしました