Office365はWebの管理画面が提供されており、各種設定はそこで行います。しかしながら、いくつかの設定項目はこのWeb管理画面で設定することができず、PowerShellやAPIを経由した設定しかできないものがあります。そのため、Office365におけるコンフィグレーションにはPowerShellを用いる機会が多く発生します。本記事では、PowerShellを使ってOffice365にアクセスするための方法を解説します。
準備
PowerShellを普段使われない方のために、PowerShellの基礎から説明します。
標準でWindowsに用意されているPowerShellのコンソールには2種類存在します。
1つ目は通常のPowerShell (powershell.exe)です。
2つ目がPowerShell ISE (powershell_ise.exe)です。
通常のPowerShellは、従来のDOSプロンプトと同様なインタフェースとなっています。PowerShell ISEはコマンドラインの画面に、更にいろいろなボタンや機能を追加したものとなります。特に、PowerShell ISEの方ではコードヒントを表示してくれるので、PowerShellにあまり慣れていない人にとってはこちらの方が便利だと思います。
DOSプロンプトの場合、.batや.cmdファイルでバッチファイルを作成することができますが、PowerShellにおいては.ps1ファイルでバッチファイルを作成することができます。しかしながら、デフォルトの状態ではセキュリティの強化により、.ps1ファイルは実行できないようになっています。
現在の状態がどうなっているのか確認をするためには、PowerShellで以下のコマンドを実行します。
Get-ExecutionPolicy
「Restrected」が表示された場合は、現在.ps1ファイルは実行できません。
このExecutionPolicyの値とその意味は次の通りです。
Restricted |
構成ファイルの読み込みやスクリプトの実行を行いません。既定値は “Restricted” です。 |
---|---|
AllSigned | すべてのスクリプトと構成ファイルが信頼された発行元によって署名されていることを要求します (ユーザーがローカル コンピューターに書き込むスクリプトを含む)。 |
RemoteSigned |
インターネットからダウンロードされたすべてのスクリプトおよび構成ファイルが、信頼された発行元によって署名されていることを要求します。 |
Unrestricted | すべての構成ファイルを読み込み、すべてのスクリプトを実行します。インターネットからダウンロードされた署名されていないスクリプトを実行する場合、スクリプトを実行する前に確認を求められます。 |
Bypass | 何もブロックされず、警告もメッセージも表示されません。 |
Undefined | 現在のスコープから現在割り当てられている実行ポリシーを削除します。このパラメーターは、グループ ポリシー スコープ内で設定された実行ポリシーは削除しません。 |
自分で作成するps1ファイルを動作させるためには、「RemoteSigned」を設定しておくと良いでしょう。
また、この設定にはスコープがあり、どの範囲に対して設定するのかを指定することができます。
Process | 実行ポリシーは現在の Windows PowerShell プロセスにのみ影響します。 |
---|---|
CurrentUser | 実行ポリシーは現在のユーザーにのみ影響します。 |
LocalMashine | 実行ポリシーはコンピューターのすべてのユーザーに影響します。 |
以下のようにポリシーを設定すると、ps1ファイルが実行できるようになります。スコープは必要に応じて最適なものを選択してください。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
次項より、本題のPowerShellを使ってOffice365へ接続する方法を解説します。
認証
Office365へ接続するためには、当然ながら認証が必要となります。今回は、WindowsにログインしているアカウントがAzureAD上のアカウントではない環境を前提とします。
まずはPowerShellで以下のコマンドを実行してみてください。
$credential = Get-Credential
すると、下図のような認証ダイアログが表示されるはずです。
ここにOffice365へ接続可能なアカウントを入力してください。そうすると、このユーザIDとパスワードの情報はSystem.Management.Automation.PSCredentialオブジェクトとして$credential変数に格納されます。この後、Office365への接続に対し、この$credentialの情報を使用して認証を行うことになります。
Exchange Onlineへの接続
Exchange Onlineへ接続するには、リモートのサーバに対してセッションを確立して接続を行います。Exchange Onlineとセッションを確立するためには、次のコマンドを実行します。
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $credential -Authentication Basic -AllowRedirection
New-PSSessionの詳細はこちら
今回は認証に基本認証を指定しています。必要に応じてカスタマイズしてください。
認証情報及びネットワーク環境等に問題がなければ、接続が完了します。エラーが起きた場合は、エラーメッセージを参考にアカウント情報、およびネットワーク環境を見直してください。
次に、Exchange Onlineで実行可能な各種コマンドレットのモジュールをリモートサーバからダウンロードします。
Import-PSSession $session
これでExchange Onlineに接続し、操作を行う準備が完了しました。
問題がないか、以下のコマンドレットを実行してみてください。
Get-Mailbox
エラーが発生せず、すべてのメールボックスの一覧が表示されればOKです。