kazuakix の日記

Windows Phone とか好きです

PowerShell で Office 365 に接続するパスワードをファイルに保存しておく方法

PowerShell を使って Office 365 に接続するとき、いつもは Get-Credential コマンドレットを使って ユーザー名とパスワードを入力していました。

$credential = Get-Credential

f:id:kazuakix:20160807202834p:plain,w320

こうして作ったクレデンシャル (認証情報) で各サービスに接続する訳です。

# Exchange Online に接続
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $credential -Authentication "Basic" -AllowRedirection
# いろいろな処理
Remove-PSSession $session

 
普段はこれで十分なんですが、タスクで自動実行したいときなんかには困りますよね。

そんなときはパスワードを別ファイルに保存しておくことができます。

$credential.Password | ConvertFrom-SecureString | Set-Content d:\pass.dat

この例では d:\pass.dat にパスワードが保存されます。ConvertFrom-SecureString でセキュリティ保護された文字列をただの (暗号化された) 文字列に変換してあげているのがミソです。
 
あとは自動実行したいスクリプトでこのファイルを読み込んで ConvertTo-SecureString でセキュリティ保護された文字列に戻したうえで、ユーザー名の文字列と一緒に System.Management.Automation.PSCredential (のコンストラクタ) に渡してあげることでクレデンシャルを作ることができます。

なので例えば Exchange Online に接続する場合はこんなスクリプトになります。

$pass       = Get-Content d:\pass.dat | ConvertTo-SecureString
$credential = New-Object System.Management.Automation.PSCredential "*****@kazuakix.jp",$pass
# Exchange Online に接続
$session    = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $credential -Authentication "Basic" -AllowRedirection
# いろいろな処理
Remove-PSSession $session