PowerShellでリモート処理

大筋はこの辺を参考に。
http://codezine.jp/article/detail/4709

ネットワークの種類がパブリックだとだめ?

PS C:\WINDOWS\system32> Enable-PSRemoting
WinRM は要求を受信するように更新されました。
WinRM サービスの種類を正しく変更できました。 
WinRM サービスが開始されました。 

Set-WSManQuickConfig : このコンピューターのネットワーク接続の種類の 1 つが Public に設定されているため、WinRM ファイアウォール例外は機能しません。 
ネットワーク接続の種類を Domain または Private に変更して、やり直してください。 

パブリックになっているネットワークを無効化する手もあるようですが、-SkipNetworkProfileCheckというオプションがあります。

PS C:\WINDOWS\system32> Enable-PSRemoting -SkipNetworkProfileCheck
WinRM は既にこのコンピューター上で要求を受信するように設定されています。
WinRM はリモート管理用に更新されました。
このコンピューター上のあらゆる IP への WS-Man 要求を受け付けるため、HTTP://* 上に WinRM リスナーを作成しました。 
WinRM ファイアウォールの例外を有効にしました。 
ローカル ユーザーにリモートで管理権限を付与するよう LocalAccountTokenFilterPolicy を構成しました。

できた。

TrustedHostsはどっちに設定するの

あまり読まずに勝手に「TrustedHostsというのは、信頼するクライアントをサーバー側に設定するものだ」と思いこんでいましたが、クライアントがサーバーを信頼するもののようです。ドメイン環境でKerberos認証を使っている場合相互認証が行われますが、それができない場合ユーザーが明示的に信頼する必要があると。
と書いておいて、HTTPSを使う場合はTrustedHostsいらないので、今回はこっちを試しました。

HTTPSリスナを有効にする

証明書を使ったサーバー認証ができるのがポイントなのかなー。

サーバー証明書を用意する

makecertで作ったオレオレCAがあったのでこれを流用。ルート証明書はクライアント側の信頼されたルート証明機関ストアにインストール。
サーバー証明書(一応CNはホスト名と同じにした)を作って、ローカルコンピュータの個人ストアに。
参考 http://diary-of-paddy.blogspot.jp/2012/05/winrmhttpsbasic.html

リスナを作成
PS C:\WINDOWS\system32> winrm create winrm/config/listener?Address=*+Transport=HTTPS '@{Hostname="ホスト名";CertificateThumbprint="サーバー証明書の拇印"}'
ResourceCreated
    Address = http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
    ReferenceParameters
        ResourceURI = http://schemas.microsoft.com/wbem/wsman/1/config/listener
        SelectorSet
            Selector: Address = *, Transport = HTTPS

ところで最初こんなエラーに悩まされてました。

PS C:\WINDOWS\system32> winrm create winrm/config/listener?Address=*+Transport=HTTPS @{Hostname="ホスト名";...}
winrm : エラー: Invalid use of command line. Type "winrm -?" for help.

違いは@{}前後の引用符。さっきの記事もだけど引用符なしの情報があって・・・引用符ありが正しいようです。
winrmコマンドってPowerShellのコマンドレットでもないのに、なんでそのままハッシュ記法してるんだろうなーって気になってはいたんですが、たぶん内部でPS呼び出してるから、ハッシュ記法も文字列として渡すということなんでしょう。

ファイアウォールの設定

Windows8だと、HTTPリスナ用には定義済みの規則があったのでこれを有効化するだけでした(Enable-PSRemotingがやってくれたけど)。HTTPSリスナ用には用意されていないので、SystemのTCP5986宛の通信を許可する規則を作ります。

接続

HTTPSを使うのでTrustedHostsの設定は不要。Enter-PSSession等する際に-UseSSLオプションを付けます。
できた。

追記
Enter-PSSession : リモート サーバー 10.8.0.1 への接続に失敗し、次のエラー メッセージが返されました: 宛先のコンピューター (10.8.0.1:5986)  のサーバー証明書に次のエラーがあります: 
SSL 証明書は、失効について確認できませんでした。失効確認用に使用されているサーバーにアクセスできない可能性があります。     
SSL 証明書にホスト名と一致しない共通名 (CN) が含まれています。詳細については、about_Remote_Troubleshooting のヘルプ トピックを参照してください。

・・・。
IPアドレスをCNにした証明書でリスナを作り直したら通りました。
このとき以下のように待ち受けアドレスを限定すると同じポートが使えてよいかも。

PS C:\WINDOWS\system32> winrm create winrm/config/listener?Address=IP:10.8.0.1+Transport=HTTPS '@{...}'