WinRM 2.0を使ってワークグループ環境のリモートマシンでコマンドを実行する

Software Designに載っていた記事では不十分なところがあり、ワークグループ環境でWinRMを使ってリモートマシン上のコマンドを実行させる最短手順をまとめ。
以下の環境は素の Windows Server 2008 R2 が 2台、インストールしてIPアドレスまでの設定が終わった状態。


1. リモートマシンでWinRMによるリモート実行を許可する
リモートマシン上のコマンドプロンプトで以下のコマンドを実行

> winrm quickconfig


HTTP://〜を有効にしますか、とか聞いてくるくせに実際に開くポートが 5985 なのがわかりづらい、というか、WS2008では本当に80だったらしいけど表記更新ミスのバグだと思う。まあファイアウォールは開いてくれるので害は無いんだけど。


2. ローカルマシンからリモートマシンでの実行を許可する
ローカルマシンでPowerShellを起動し以下のコマンドを実行。ついでにスクリプト実行許可のお約束も設定。

> Set-Item WSMan:\localhost\Client\TrustedHosts -Value *
> Set-ExecutionPolicy RemoteSigned


3. ローカルマシンからリモートマシンのコマンドを実行する
ワークグループ環境でパスワードを指定するというのが主に面倒くさい。
スクリプトにパスワード埋め込みをさせたくないとかマイクロソフト様的にいろいろ思うことはあるんだろうけど。

> $pass = ConvertTo-SecureString -AsPlainText -Force ""
> $psc = New-Object System.Management.Automation.PSCredential("", $pass)
> Invoke-Command -ComputerName {} -Credential $psc

はリモートマシンのユーザー名、パスワード。
はリモートマシンのIPアドレス
はリモートマシンで実行したいバッチファイル名やコマンドを指定する。


4. スクリプトとして実行するには
手順3の3行の実行コマンドは、行先頭のプロンプト記号 "> " を削除して、ユーザー名とかパスワードとかを適当なものに置換すれば、スクリプトとしてバッチ的に実行出来る。
C:\testps.ps1とかの名前で保存して、コマンドプロンプトから下記のコマンドを実行すればOK。

> powershell C:\test.ps1


(追記)
あー・・この方法を使っても、Windowsタスクでローカルシステムアカウントを使って自動実行をすることは無理っぽい。めんどくせーなーったく。