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オプションを立ち上げれば良いので、
この通りやってもできないですね・・・・・
>answer様
どの辺りでつまずきますでしょうか? 手動でやって接続できるのに・・・という場合考えられるのは、.c:psadmin_example.passへのアクセス権限辺りかと思いますが。他には以下のような感じでしょうか?
・Office 365 用 Windows PowerShell コマンドレットをインストールしていない → Import-Module MSOnlineがエラー
・Set-ExecutionPolicy がRemoteSignedに設定されていない → Import-PSSessionでエラー
私のスクリプトのスキルが足りないせいだと思うのですが、
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つのスクリプトの用途に関してはご指摘いただいたとおりでございます。
ありがとうございます。
やっと理解できました。
問題なく接続できました。
はじめまして。
いつも参考にさせて頂いております。
本内容について質問ですが、こちらはPowerShellに対する自動接続であり、ブラウザーの自動接続をすることはできませんか?
>石丸様
はい、本記事はPowerShellからPowerShell専用の接続ポイントに自動接続するための手法なのでブラウザのアクセスには使えません。
ブラウザからの自動接続は不可能ではないですが、手法等が公開されている訳では無くかなりハードルが高いかと思います。
genkiw さん
私は、最近Office365を使い始めました。
PowerShell初心者の私でも大変わかりやすく解説いただいてありがとうございます!
これからも頑張ってください!
Pingback: PowerShellによるサブスクリプション一括割り当て | 日々徒然