PowerShellでのOffice365自動接続

Office365へは、ブラウザを使ったアクセスの他、PowerShellを利用してもログインすることができます。

通常はGet-Credentialコマンドレットを利用してID・Passwordを毎回入力するのですが、頻繁にアクセスする必要がある場合やタスクスケジューラーでの定期処理などを行いたい場合などは、以下の手順でログイン処理を自動化することができます。

ただ、暗号化されたパスワードがファイルとしてディスク上に存在することになりますので、このファイル(今回のサンプルの場合c:psadmin_example.pass)のアクセス権限の管理は厳密に実施して下さい。

まず、準備としてパスワードが格納されるファイルを作成します。今回のサンプルとしては、admin@example.onmicrosoft.comのパスワードをc:psadmin_example.passに格納します。

$LiveCred = Get-Credential
$LiveCred.Password | ConvertFrom-SecureString | Set-Content c:psadmin_example.pass

読み込む際は、これをGet-Contentして逆にConvertTo-SecureStringしてあげます。パスワードのみなのでアカウント名は手動でスクリプト内に埋め込みます。

admin.example_mop.ps1

Import-Module MSOnline
$password = Get-Content c:psadmin_example.pass | ConvertTo-SecureString
$LiveCred = New-Object System.Management.Automation.PSCredential "admin@example.onmicrosoft.com",$password
Connect-MsolService -Credential $LiveCred

admin.example_ems.ps1

$password = Get-Content c:psadmin_example.pass | ConvertTo-SecureString
$LiveCred = New-Object System.Management.Automation.PSCredential "admin@example.onmicrosoft.com",$password
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $LiveCred -Authentication Basic -AllowRedirection
Import-PSSession $Session -AllowClobber

※2017.12.08 新しいURLに修正済み

このスクリプトの利用方法ですが、powershellから-noexitオプションを立ち上げれば良いので、

1.適当にショートカットを作成

2.ショートカットのリンク先に「powershell -noexit」を追加

3.ダブルクリックすればOffice365に接続できます(画面はExchange Online)

9 thoughts on “PowerShellでのOffice365自動接続

    • >answer様
      どの辺りでつまずきますでしょうか? 手動でやって接続できるのに・・・という場合考えられるのは、.c:psadmin_example.passへのアクセス権限辺りかと思いますが。他には以下のような感じでしょうか?
      ・Office 365 用 Windows PowerShell コマンドレットをインストールしていない → Import-Module MSOnlineがエラー
      ・Set-ExecutionPolicy がRemoteSignedに設定されていない → Import-PSSessionでエラー

  1. 私のスクリプトのスキルが足りないせいだと思うのですが、
    Powershell は使用したことがありますし、インストール等で問題はないのですが、
    具体的に、下記内容を c:psadmin_example.pass に格納するということでしょうか?
    その場合、Password はどの部分に記載すべきですか?

    $LiveCred = Get-Credential
    $LiveCred.Password | ConvertFrom-SecureString | Set-Content c:psadmin_example.pass

    また、admin.example_mop.ps1
    はスクリプトの内容から、MSOL 計実行時のもので。

    admin.example_ems.ps1 は、Exchange 用のPowershell 実行時という認識で会ってますでしょうか?

    • 失礼しました。パスワードを暗号化してc:psadmin_example.passに格納するものとなりますが、事前にc:psのフォルダを作成しておく必要があります。また、保存するID/パスワードは1行目のコマンドを実行した際にポップアップした画面で入力します。お試しいただければ幸いです。
      2つのスクリプトの用途に関してはご指摘いただいたとおりでございます。

  2. はじめまして。
    いつも参考にさせて頂いております。

    本内容について質問ですが、こちらはPowerShellに対する自動接続であり、ブラウザーの自動接続をすることはできませんか?

    • >石丸様
      はい、本記事はPowerShellからPowerShell専用の接続ポイントに自動接続するための手法なのでブラウザのアクセスには使えません。
      ブラウザからの自動接続は不可能ではないですが、手法等が公開されている訳では無くかなりハードルが高いかと思います。

  3. genkiw さん
    私は、最近Office365を使い始めました。
    PowerShell初心者の私でも大変わかりやすく解説いただいてありがとうございます!
    これからも頑張ってください!

  4. Pingback: PowerShellによるサブスクリプション一括割り当て | 日々徒然

genkiw へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です