はじめに
社内SEなら人事異動や組織変更、名称変更、メーリングリストの作成・変更など、毎回毎回変更が発生するたびに手作業でExchangeOnlineをメンテナンスをするのは手間なので、人事システムから抽出・加工したCSVをインプットファイルとしてExchange Onliine 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のメンテナンスを自動実行する方法』でした。面倒な人事異動対応は自動実行で効率化すべき作業だと思うので、実装して損はないと思います。
コメント