しばたテックブログスマートフォン用の表示で見るしばたテックブログPowerShellを中心に気分で書いている技術ブログです。1.8.0がリリースされたのでサクッと手元の環境を更新しました。powershellコマンドについて詳しく触れていきたいと思います。1.8.0の新機能についてhttps://hashicorp.com/blog/vagrant-1-8.htmlで公式にアナウンスされています。チェンジログはここです。Cloneサポートの追加(VirtualBox/VMware)IPV6ネットワークサポートの追加(VirtualBox/VMware)がされているとの事です。powershellコマンドに絞った話をします。1.8.0のインストールインストール手順はこれまでのバージョンと特に変わりませんでした。Windowsであれば、stknohg.hatenablog.jpのエントリの内容そのままの手順で問題ないと思います。本バージョンからVagrantのインストール時にVirtualBoxの自動インストール*1もサポートされたそうなのですが今回は試せませんでした。1.8.0になります。既知の問題についてstknohg.hatenablog.jpのエントリで書いたネットワークアダプタ名が日本語名称("イーサネット"等)の場合にIPアドレスに失敗する件については本バージョンで解決した様です。パッチを当てなくても問題なくIPアドレスの設定ができました。日本語ネットワークアダプタ名がUnicodeエスケープされた形で渡されている。2)が文字化けせず渡されて実行されている。ipコマンドが実行されてIPアドレスが設定されているのがわかります。powershellコマンドの基本ここから本題に入ります。sshコマンドのWindows版です。ホストからPSRemotingでWindowsゲストに接続することができます。公式なドキュメントはこちらになります。コマンドのヘルプを見てみると以下の様な感じです。[VM名(複数VMある場合)]が基本で、単一のコマンドを実行させるだけの場合は--commandオプションを指定します。args]の部分はこのコマンドで起動するホスト側のpowershell.exeに追加のオプションを指定する場合に使います。powershellを実行すると以下の図の様になりゲストVM(127.0.0.1)にvagrantユーザーで接続していることがわかります。--commandオプションを指定した場合はこんな感じで指定されたコマンドを実行して直ちに終了しているのがわかります。ゲストのVagrantfileは以下。特別な設定は必要ありません。powershellコマンドの詳細コマンドの実体は[インストール先]\embedded\gems\gems\vagrant-1.8.0\plugins\commands\powershell\command.rbになります。Communicator([インストール先]\embedded\gems\gems\vagrant-1.8.0\plugins\communicators\winrm\communicator.rb)の機能を直接使って単一のコマンドを実行します。未検証なのですが、WinRMの通信のみを行うので、--commandオプションを使う場合は非Windowsホストでも実行可能だと思います。"ほげ"なコマンドを試してみましたが以下のエラーメッセージが出てしまい実行できませんでした。powershellコマンドはWindowsホスト専用でした。"ほげ"なコマンドを無理やり実行することはできますw当然オススメはできませんが自己責任でやるのはアリかもしれません。Vagrantで使っているWinRMライブラリのロケールがen-US、コードページが65001(UTF8)で固定*2されているため、--commandオプションを指定した場合はシェルの言語が英語になります。このため日本語の取り扱いに難があるっぽく、コマンドの実行結果に日本語が混じると即エラーとなったりしました...【追記ここまで】--commandオプションを指定しない場合--commandオプションを指定しない場合、ゲストVMに対してEnter-PSSesssionコマンドレットを使いリモート接続する流れとなります。リモート接続の前にPSRemotingが有効か否かのチェックなどを行います。こちらはホストからpowershell.exeを別途起動するため、非Windowsホストでは実行できません。Macから実行した場合、--commandオプションを指定した場合と同じエラーになります。最初に[インストール先]\embedded\gems\gems\vagrant-1.8.0\plugins\commands\powershell\scripts\enable_psremoting.ps1を呼び出し、ここでゲストVMに対してPSRemotingが有効になっているかのチェックとホスト側のTrustedHostの設定変更*3を行っています。-NoExitで呼び出しています。ps.rbから該当する部分を抜粋すると以下になります。*args)これをPowerShellのコードに直すとこんな感じになります。$EncodedCommand接続先がゲストVMなだけでよくあるEnter-PSSessionの呼び出しです。}の部分で、Enter-PSSessionが終了した次のプロンプト呼び出し時点で自分自身を殺してpowershell.exeを終了させているところでしょうか。苦労のあとが見られます。軽く使った程度ですが、かなり便利で良い感じです。広告スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。