PowerShell を使って Office 365 に接続するとき、いつもは Get-Credential コマンドレットを使って ユーザー名とパスワードを入力していました。
$credential = Get-Credential
こうして作ったクレデンシャル (認証情報) で各サービスに接続する訳です。
# 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