Azureの仮想マシンへリモートでコマンドを投げる
Azureの仮想マシンでPSRemotingによる接続をする場合、SSLでの接続が必要なので証明書のインストールが必要です。
非SSLでの接続はムッシュ先生が書いて下さってたのでご参照ください。
Azure 仮想マシンに 5985 を使用して PowerShell で接続 at SE の雑記
久々に触ると手順を毎回忘れるので覚書。
仮想マシンを作成する
# Add-AzureAccount Select-AzureSubscription -SubscriptionName $subscriptinName Set-AzureSubscription -SubscriptionName $subscriptinName -CurrentStorageAccountName $storageAccountName $imageName = (Get-AzureVMImage| ` where Label -Like "*Windows Server 2012 R2 Datacenter*" | ` sort PublishedDate -Descending | ` select -First 1).ImageName New-AzureVMConfig -Name $vmName -InstanceSize Small -ImageName $imageName | ` Add-AzureProvisioningConfig -Windows -AdminUsername $userName -Password $password | ` New-AzureVM -Location "Japan West" -WaitForBoot -ServiceName $serviceName
証明書をインストールする
念のため2種類の手順を書いておく。
その1:ブラウザ経由
Chromeでのやり方。
ChromeでPowerShellのポートを指定して開く。
鍵マークをクリックして証明書の詳細を表示する。
詳細タブでファイルにコピーボタンをクリックする。
証明書のエクスポートウィザードが立ち上がるので「次へ」を連打。
保存するパスを指定して次へ。そして完了。
C:\Users\user\Desktop\hoge.cer
保存したcerファイルをダブルクリック → 証明書のインストール
現在のユーザーかローカルコンピュータ好きな方を選択。
証明書をすべて次のストアに配置するを選択して「信頼されたルート証明書」を選択。
インストール完了。
これでEnter-PSSession とかが使えるように。 -UseSSL オプションを忘れずに。
その2:PowerShellで
$WinRMCertificateThumbprint = (Get-AzureVM -ServiceName $vmName -Name $vmName | Select-Object -ExpandProperty VM).DefaultWinRMCertificateThumbprint (Get-AzureCertificate -ServiceName $vmName -Thumbprint $WinRMCertificateThumbprint -ThumbprintAlgorithm SHA1).Data | Out-File "${env:TEMP}\CloudService.tmp" $X509Object = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 "$env:TEMP\CloudService.tmp" $X509Store = New-Object System.Security.Cryptography.X509Certificates.X509Store "Root", "LocalMachine" $X509Store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite) $X509Store.Add($X509Object) $X509Store.Close() Remove-Item "$env:TEMP\CloudService.tmp"
おまけ:もろもろ有効にする
Windows Server 2012 R2より前のものを使う場合はいろいろ有効化しないといけないです。
が、色々と罠があったりして面倒なのでぎたぱそせんせーのValentiaを使いましょふ。
まだvalentiaをインストールしていない方は以下をおもむろに
# @Visual Studioのパッケージ マネージャー コンソール Install-Package valentia
もしくは
# @コマンドプロンプト OR PowerShellコンソール OR PowerShell ISE powershell -NoProfile -ExecutionPolicy unrestricted -Command 'iex ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String((irm "https://api.github.com/repos/guitarrapc/valentia/contents/valentia/Tools/RemoteInstall.ps1").Content))).Remove(0,1)'
を入力してEnterキーを軽快に叩きましょう。
ここでエラーが発生する場合はPowerShellへの信仰心が足りません。精進しましょう。
おそらく引数が空の文字列であるため、パラメーター 'Path' にバインドできません。
的なエラーが出ているのではないでしょうか。
PowerShellの仕様なのかなんなのか、なぜか$env:PSModulePathにマイドキュメントへのパスが載らないことがあるようです。
おとなしくマイドキュメントへのパスを環境変数に追加しましょう。
$path = [System.Environment]::GetEnvironmentVariable("PSModulePath", "Machine") $path += ";$([System.Environment]::GetFolderPath("MyDocument"))\" [System.Environment]::SetEnvironmentVariable("PSModulePath", "Machine")
PowerShellコンソール(OR ISE)を立ち上げて、モジュールを読み込みましょう。
Import-Module valentia
ここまで終わったら後は以下のコマンドレットを叩くだけ。*1
Initialize-ValentiaEnvironment -NoOSUser -NoPassSave -NoReboot
色々と善きに計らってくれます。OSを日本語化してても大丈夫です。
ぎたぱそせんせー is GOD
Initialize-ValentiaEnvironmentに失敗したらvalentia.ps1の中身を修正して対応しませう。
Valentiaは少しづつ触っているけど、ちゃんと機能を使えたらとても便利そう。
*1:Valentiaの機能をフル活用する時はNoOSUserとかを必要に応じて外すこと