何でも屋: Windows PowerShell を使用して Office 365 を管理する

Office 365 などのクラウド アプリケーションの管理に Windows PowerShell を使用する必要があると想像したことがない初心者向けのクイック スタート ガイドです。

Greg Shields

私が経営する Concentrated Technology では、最近、Google Apps for Business から Microsoft Office 365 に移行しました。この移行は、とても簡単に行えました。シンプルなサードパーティ製のソリューションを使用して、既存のデータを新しいプラットフォームに移行しましたが、このとき必要だったのは、1 人のユーザーにつき 2 つのパスワードと 1 回のクリック操作程度でした。

気付いたときには、新しい一連の規則を使用する新しいインフラストラクチャへの移行が完了していました。当社は、マイクロソフト テクノロジに慣れ親しんでいましたが、Office 365 で Windows PowerShell に対応している範囲については、まったく気付いていませんでした。Windows PowerShell および Office 365 という組み合わせは、少し奇妙に思えるかもしれません。と言うのも、Office 365 のようなソリューションを必要とするユーザーは、シンプルさを求めているからです。

Windows PowerShell を使用してタスクを完了することは必ずしも複雑ではありませんが、取るに足らない作業でもありません。おそらく、最大の難所は、使い始めることでしょう。今月は、初心者の方向けに Office 365 を管理するための Windows PowerShell クイック スタート ガイドを作成しました。このガイドの手順に従って、いくつかの主要なコマンドレットを学習すると、"強力" および "シンプル" という特性は、必ずしも相容れないものではないことを理解していただけると思います。

手順 1: (真の) リモート実行に慣れる

Windows PowerShell は、本当に強力なツールです。ただし、初心者の方が、つまずきやすい時期があります。それは、大半の基本的なコマンドレットを学習していても、便利なソリューションを作成する方法を十分に理解していないときに訪れます。Get-Process コマンドレットを実行してローカル コンピューターで実行中のプロセスを確認することと、一連のコマンドレットをリモート コンピューターに渡して実際に操作を完了することは異なります。

LAN で Windows PowerShell のリモート処理のしくみについて時間をかけて理解することをお勧めします。いくつかのコマンドレットで –computerName パラメーターがどのように機能するのかを試したり、Invoke-Command コマンドレットが必要なコマンドレットがあることも試してみてください。また、Get-Help コマンドレットと例を表示する便利な -exa スイッチも使いこなしてください。

Windows PowerShell で Office 365 を管理するには、しっかりした基礎が必要になるため、これらのスキルが必要になります。Office 365 のコマンドレットを実行すると、自社のサーバーではなく、マイクロソフトが管理しているサーバーに対してコマンドを実行することになり、LAN ではなく、インターネット経由でコマンドを送信することになります。この点について考え方を改める必要がありますが、これは良いことです。これらの概念に慣れると、Windows PowerShell について十分理解したときに、Windows PowerShell は、強力な威力を発揮します。

手順 2: Windows PowerShell の準備をする

Windows PowerShell は、既定の状態では Office 365 に対応していません。Windows 7 デスクトップから Office 365 を管理するには、いくつかの準備作業が必要となります。

Office 365 の管理に Windows PowerShell を使用する (英語)」にアクセスし、Office 365 のコマンドレットをインストールします。Office 365 のコマンドレットは、Microsoft Online Services Module for Windows PowerShell のコンポーネントとしてインストールされます。これらのコマンドレットには、x86 エディションと x64 エディションがあります。Office 365 のコマンドレットをインストールする前には、Microsoft Online Services サインイン アシスタントをインストールする必要があります。また、デスクトップ コンピューターには、Windows PowerShell と .NET Framework 3.5.1 がインストールされ有効になっている必要があります。

手順 3: モジュールのインポート、セッションの作成、コマンドのインポートを実行する

Windows PowerShell コマンドレットのインストールが完了しても、土台の設定が完了したに過ぎません。コマンドレットをインストールしただけでは、Microsoft Office 365 クラウドに接続できません。クラウドに接続するには、次の 5 つのわかりやすいながらも面倒な手順を実行する必要があります。

1. 新しくインストールした Online Services モジュールをインポートする

2. Office 365 の資格情報を入力する

3. リモート セッションを作成する

4. 作成したリモート セッションのコマンドをローカルの Windows PowerShell セッションにインポートする

5. Office 365 サービスに接続する

この手順を実行する 5 つのコマンドは次のとおりです。

Import-Module MSOnline
$O365Cred = Get-Credential
$O365Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $O365Cred -Authentication Basic -AllowRedirection
Import-PSSession $O365Session
Connect-MsolService –Credential $O365Cred

一見すると、複雑な構造に見えるかもしれませんが、Windows PowerShell は、あらゆるユーザーがあらゆる処理を行えるように設計されたツールであることを思い出してください。そのため、コマンドの長さは処理によって異なります。この構造では 5 つの処理を行っていることを認識する必要があります。まず、Import-Module コマンドレットを使用して、Office 365 のコマンドレットをセッションに追加しています。この結果、ローカル セッションで、Office 365 を管理できるようになります。

次に、Office 365 のユーザー名とパスワードを入力するダイアログ ボックスが表示されます (ユーザー名は、<ユーザー名>@<ドメイン>.onmicrosoft.com のようになります)。この資格情報は、変数 $O365Cred に格納され、この値は後で使用できます。

すばらしいのは、ここからです。3 つ目と 4 つ目のコマンドでは、クラウド (https://ps.outlook.com/powershell) に新しい Windows PowerShell のセッションを作成します。その後、これらのコマンドでは、このセッションのコマンドレットをローカル セッションにインポートします。これは、PSExec を使用してリモート サーバーのコマンド プロンプトにアクセスする場合と同じように考えることができます。大きな違いは、リモート サーバーがクラウド上に存在していることです。クラウドのリモート セッションは、実際に、ローカル セッションに結合されます (図 1 参照)。

Office 365 のリモート セッションを作成する

図 1 Office 365 のリモート セッションを作成する

図 1 の黄色のテキストをもう一度参照してください。次のようなテキストが表示されていると思います。

WARNING: Your connection has been redirected to the following URI:
"https://pod51018psh.outlook.com/PowerShell-LiveID?PSVersion=2.0"
WARNING: Your connection has been redirected to the following URI:
"https://sn2prd0702psh.outlook.com/PowerShell-LiveID?PSVersion=2.0"

皆さんの実行結果では、URI は図 1 のものとは少し異なると思いますが、リモート セッションを https://ps.outlook.com/powershell に接続すると、Office 365 のリソースをホストするサーバーに自動的にリダイレクトされます。私の環境では、サーバーの URI は、pod51018psh.outlook.com と sn2prd0702psh.outlook.com でした。

皆さんの環境では、サーバーの URI は異なっているでしょう。これらは、後で Windows PowerShell の Office 365 のコマンドレットを実行したときに直接操作するサーバーです。

手順 4: 新しいコマンド ライブラリを尊重する

接続を確立したら、Office 365 の資産を管理する準備は完了です。このコラムの執筆時点では、Windows PowerShell は、Office 365 のリソースと Exchange のリソースにのみ対応しています。SharePoint には、近日対応する予定です。

現在利用できる Office 365 コマンドレットの一覧は、「Get-Command -module MSOnline」というコマンドを実行して確認できます。このページ (英語) では、Office 365 のコマンドとその概要が表形式で公開されています。

特に便利な Office 365 のパスワードを変更するコマンドレットを紹介しましょう。このコマンドレットでは、パスワードを P@ssword! にリセットします。-NewPassword パラメーターを省略して、ランダムなパスワードを自動生成することもできます。

Set-Mso l <ユーザーのパスワード> -UserPrincipalName <ユーザー名>@<ドメイン名>.onmicrosoft.com -NewPassword P@ssword!

これらのコマンドレットは、すべて Office 365 オブジェクトに関連しています。これらのコマンドレットに追加で使用するなら、Office 365 オブジェクトが連動している Exchange リソースを管理するコマンドレットがお勧めです。かなり多数のコマンドレットがありますが、このページ (英語) に便利な参考資料が用意されています。

手順 5: プロファイルが作業を楽にする

手順 3 でクラウドに接続するのに使用した 5 つのコマンドは、大きなテキスト ブロックです。ログインするたびに、この大量のテキストを再入力するとなると、Windows PowerShell を使用するための労力が、使用する価値を上回るように思われるでしょう。ですが、Windows PowerShell (およびシェル スクリプト全般) は、一度行えば、その成果をその後ずっと活用できるようにするためのツールです。

Windows PowerShell では、セッションを開始するたびに、変数 $profile が参照している特殊なファイルに含まれるコマンドが実行されます。このファイルの場所は、シェルで「dir $profile」というコマンドを実行して確認できます。

私の環境の変数 $profile では、Microsoft.PowerShell_profile.ps1 ファイルを参照しており (図 2 参照)、このファイルは、C:\Users\gshields\Documents\WindowsPowerShell ディレクトリにあります。このファイルは、お好きなテキスト エディターで編集して、5 つの接続コマンドを追加できます。このファイルを編集すれば、Windows PowerShell を起動後、Office 365 とネットワーク上にある他のすべてのものに自動接続するために入力が必要になるのは、ユーザー名とパスワードのみになります。

変数 $profile の内容

図 2 変数 $profile の内容

権力の行使には責任が伴う

このコラムで紹介した手順を使用すると、ローカル リソースとリモート リソースを管理できるシームレスに結合したワークスペースを作成できます。このワークスペースは、便利であると同時に危険でもあります。

Get-Process | Stop-Process コマンドの実行結果を学習したときに、くすくすと笑っていた方は (そのような行為は止めることをお勧めします)、Get-MsolUser | Remove-MsolUser コマンドで行われる処理を理解したときに身震いをすることになるでしょう。新しい権力を行使するときには注意してください。権力を行使する場合に伴う責任についても心に留めておいてください。

Greg Shields

Greg Shields (MVP) は、Concentrated Technology の共同経営者です。何でも屋である IT プロフェッショナル向けのヒントとテクニックについては、ConcentratedTech.com (英語) を参照してください。

関連コンテンツ