Hyper-Vホストから仮想マシンゲストの操作を可能にするPowerShell Directとは:vNextに備えよ! 次期Windows Serverのココに注目(18)
Windows Server 2016 Hyper-Vでは、「PowerShell Direct」というホストとゲスト間の新しい対話機能が利用可能になる予定です。PowerShell Directとはどんな機能なのか、Windows Server Technical Preview 2で試してみました。
PowerShell Directの前に、まずはPowerShell Remotingの話から
「PowerShell Direct」は、Windows Server 2016に搭載予定のWindows PowerShellおよびHyper-Vの新機能です。PowerShell Directを説明するためには、まずはWindows PowerShellの「PowerShell Remoting」の話から始めなければならないでしょう。
PowerShell RemotingはWindows PowerShell 2.0からサポートされた、Windows PowerShellのリモート実行機能です。PowerShell Remotingを利用すると、リモートコンピューターに「PSセッション」(Windows PowerShellの実行環境)を生成して、Windows PowerShellのコマンドラインやスクリプト、その他のWindowsコマンドをリモート実行することができます。
簡単な例で説明しましょう。例えば、以下のコマンドラインを実行すると、リモートコンピューターにPSセッションを生成して接続し、リモートコンピューターのWindows PowerShellを対話的に実行することができます(画面1)。
PowerShell Remoting利用したEnter-PSSessionコマンドレットの実行例
Enter-PSSession -ComputerName <コンピューター名> -Credential <リモート接続の資格情報>
なお、Active Directoryのドメイン環境では、資格情報の指定を省略できます。その場合は、サインイン中のユーザーの資格情報が使用されます。
また、以下のコマンドラインを実行すると、リモートコンピューターにPSセッションを生成して接続し、そのPSセッション内で「スクリプトブロック」(Windows PowerShellのコマンドラインやその他のWindowsコマンド)を実行し、その実行結果をローカルコンピューター側で取得できます。生成されたPSセッションは、スクリプトブロックの実行後に終了します。
Invoke-Commandコマンドレットの実行例
Invoke-Command {<スクリプトブロック>} -ComputerName <コンピューター名> -Credential <リモート接続の資格情報>
次のように記述すると再利用可能なPSセッションを作成し、そのPSセッションに対して「Enter-PSSession」コマンドレットや「Invoke-Command」コマンドレットを実行できます。
再利用可能なPSセッションの作成例
$mysession = New-PSSession -ComputerName <コンピューター名> -Credential <リモート接続の資格情報>
Invoke-Command $mysession {<スクリプトブロック1>}
Invoke-Command $mysession {<スクリプトブロック2>}
Disconnect-PSSession $mysession
PowerShell Remotingには他にもさまざまな機能や使い方がありますが、PowerShell Directを説明するにはEnter-PSSessionとInvoke-Commandコマンドレットの基本的な使い方だけを知っていればいいでしょう。
なお、PowerShell Remotingを利用するには、操作される側のリモートコンピューターで「Enable-PSRemoting」コマンドレットを実行し、PowerShell Remotingの接続を受け付けるようにしておく必要があります。
また、ワークグループ構成のコンピューターへの接続やIPアドレスでの接続には、操作元のコンピューターで「WS-Management」プロトコルの「TrustedHosts」(信頼されたホスト)を構成しておく必要があります。
Enter-PSSessionとInvoke-Commandに仮想マシンに接続する新しいオプション
Windows Server Technical Preview 2のEnter-PSSessionおよびInvoke-Commandコマンドレットには、「-VMName」という新しいパラメーターが追加されました。
-VMNameはこれまでの「-ComputerName」の代わりに指定することができ、引数にはローカルのHyper-V環境で実行中の仮想マシン名を指定します(画面2)。また、-VMNameの代わりに、「-VMGuid」パラメーターに仮想マシンのGUID(Globally Unique Identifier:グローバル一意識別子)を指定することもできます。
新しいパラメーター「-VMName」の利用例
Enter-PSSession -VMName <仮想マシン名> -Credential <リモート接続の資格情報>
Invoke-Command {<スクリプトブロック>} -VMName <コンピューター名> -Credential <仮想マシン名>
資格情報の指定は必須であり、「-Credential」パラメーターを省略した場合は追加で要求されます。現時点では、仮想マシンのゲストOSとして、Windows Server Technical Preview 2、Windows 10 Insider Previewが動作している必要があります。Windows Server Technical Preview 2のNano Serverに対しては、残念ながら使用できません。
実は、PowerShell Remotingしているわけではありません
もう一度、前出の画面2をよく見てください。実は、Enter-PSSessionやInvoke-Commandコマンドレットで仮想マシンに接続する前に、仮想マシンのゲストOSで「Disable-PSRemoting」コマンドレットを実行し、PowerShell Remotingの機能を無効にしていました。最初のInvoke-Commandコマンドレットの「Access is denied」エラーは、PowerShell Remotingが無効になっていたからです(前出画面2の赤文字部分)。
つまり、Enter-PSSessionやInvoke-Commandコマンドレットの-VMNameパラメーターを使用したリモート実行は、PowerShell Remotingの機能を利用していないのです。もっと言えば、ネットワークも使用していません。
以下の画面3は、Enter-PSSessionコマンドレットで仮想マシンに接続後、仮想マシンのネットワークアダプターを仮想スイッチから切断したところです。ネットワークから切断された状態でも、PSセッションは切断されていません。
Get-Helpには新機能のヘルプはあるの? ないの?
Enter-PSSessionやInvoke-Commandコマンドレットのこの新機能について、公式なドキュメントは公開されていません。筆者はこの機能を、以下のマイクロソフトの公式ブログで知りました。
- PowerShell Direct - Running PowerShell inside a virtual machine from the Hyper-V host[英語](Microsoft Virtualization Blog)
PowerShell Remoting関連のコマンドレットのヘルプ(Get-Help <コマンドレット名>)を見ると、-VMNameおよび-VMGuidパラメーターをサポートしているのは、Enter-PSSessionとInvoke-Commandコマンドレットの二つだけのようです。New-PSSessionコマンドレットでは-VMNameパラメーターは使えませんでした。
ちなみに、新しいヘルプで確認しようと「Update-Help」コマンドレットでヘルプコンテンツを更新したところ、Enter-PSSessionとInvoke-Commandコマンドレットの新しいパラメーターに関する記述がヘルプから消えてしまいました(画面4)。
古いバージョンのヘルプをダウンロードして更新しているのでしょうか。他のヘルプにも影響する可能性があるかもしれないので、Windows Server Technical Preview 2でUpdate-Helpコマンドレットを実行するのは控えた方がよいかもしれません。
当然のことですが、消えるのはヘルプ内の記述だけで、機能は消えません。ただし、正式リリースでこの機能が提供されるのかどうかは、まだ何とも言えません。
ゲストOSへのファイルコピーは「ゲストサービス」と「Copy-VMFile」で
Hyper-VのホストOSとゲストOS間のネットワーク接続に依存しないコミュニケーションの手段としては、PowerShell Directの他に「KVP(Key Value Pair)データ交換サービス」と「ゲストサービス」があります。
KVPデータ交換サービスはHyper-Vの最初のバージョンから、ゲストサービスはWindows Server 2012 R2のHyper-Vから利用可能です。どちらの機能も、サポート対象の全てのWindowsおよびLinuxゲスト(一部を除く)で利用できます。
KVPデータ交換サービスは、仮想マシンのゲストレジストリのキー(HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Virtual Machine¥Guest、Auto、External)を介して、「値(Value)」と「データ(Data)」のペア(Pair)をホストOSとゲストOSで共有する機能です。
Linuxゲストの場合は、ファイル(/var/lib/hyperv/.kvp_pool_0〜3)を介してデータを共有し、「Linux統合サービス(Linux Integration Services:Linux IS)」のKVPデーモン(hv_kvp_daemon)がホストとのインターフェースになります。
KVPデータ交換サービスは、Hyper-VホストがゲストOSの統合サービスのバージョン情報やIPアドレス情報を取得するのに利用されます。KVPデータ交換サービスについて詳しく知りたい場合は、以下のドキュメントを参考にしてください。
- Data Exchange:Using key-value pairs to share information between the host and guest on Hyper-V[英語](Microsoft TechNet)
Windows Server 2012 R2から利用可能なゲストサービスは、Hyper-VホストからゲストOSに対してファイルをコピーする機能を提供します。ゲストサービスは既定では無効になっているので、利用するためには仮想マシンの設定でサービスを有効化する必要があります。
Hyper-Vの仮想マシンとして動作するWindows Server Technical Preview 2のNano Serverは、ゲストサービスに対応しています。Linuxゲストでは、「fcopyデーモン(hv_fcopy_daemon)」が必要になります。
ゲストサービスを使用したファイルのコピーには、Windows PowerShellの「Copy-VMFile」コマンドレットを使用します(画面5、画面6)。「-FileSource」パラメーターはコピーの方向を指定するもののように見えますが、現状、「Host」以外の引数は存在しません。つまり、ファイルコピーはホストOSからゲストOSへの一方向のみで可能です。
「Copy-VMFile」コマンドレットの実行例
Copy-VMFile -Name <仮想マシン名> -SourcePath <ホスト側のファイルパス> -DestinationPath <ゲスト側のファイルパス> -FileSource Host
ゲストサービスとCopy-VMFileコマンドレットを使用すると、ゲストOS側の資格情報の入力を求められることなく、ホストOSからゲストOSに対してファイルをコピーすることができてしまいます。セキュリティ的にどうかとも思うのですが、「C:¥Windows」のパスや「/etc/hosts」など、重要なシステムファイルを上書きしようとしてもエラーになりました。この機能が悪用されないように、一応、最低限の考慮はなされているようです。
- 「パスワードのない世界」を実現する「Windows Hello for Business」のオンプレ展開をリアルレポート(その6)
- 「パスワードのない世界」を実現する「Windows Hello for Business」のオンプレ展開をリアルレポート(その5)
- 「パスワードのない世界」を実現する「Windows Hello for Business」のオンプレ展開をリアルレポート(その4)
- 「パスワードのない世界」を実現する「Windows Hello for Business」のオンプレ展開をリアルレポート(その3)
- 「パスワードのない世界」を実現する「Windows Hello for Business」のオンプレ展開をリアルレポート(その2)
- 「パスワードのない世界」を実現する「Windows Hello for Business」のオンプレ展開をリアルレポート(その1)
- ついに完成、Windows Server 2016 評価版をインストールしてみた
- Windows Server 2016の「サーバー管理ツール」に追加された4つの新機能
- 小規模ビジネス専用エディション、Windows Server 2016 Essentialsの機能と役割
- 管理者権限をコントロールする2つのアプローチ――必要最低限の管理(JEA)と特権アクセス管理(PAM)
- Hyper-Vホストクラスタの新機能(2)──仮想マシンの開始順序
- 速報! Windows Server 2016の正式リリースは2016年9月末に
- Hyper-Vホストクラスタの新機能──仮想マシンのノードフェアネス
- Dockerとの相互運用性が向上したWindowsコンテナ[後編]
- Dockerとの相互運用性が向上したWindowsコンテナ[前編]
- いつでも、どこからでも使える、Windows Server 2016向けリモート管理ツール「サーバー管理ツール」
- Windows Server 2016 TP5の「サーバーの役割と機能」、TP4からの変更点まとめ
- Windows Server 2016 Technical Preview 5の評価方法と注意点
- Hyper-V上のLinux仮想マシンで新たにサポートされる機能
- 実録:Windows ServerコンテナでSQL Serverを動かしてみた
- Windows Server 2016で大きく変わるライセンスモデル
- Windows 10の「ワークプレース参加」はどうなる?[後編]
- Windows 10の「ワークプレース参加」はどうなる?[前編]
- 意外と賢くなったWindows Server 2016のWindows Defender
- パブリッククラウドでDaaSを可能にするWindows Server 2016の新機能
- 実運用への道に近づいた、新しい「Nano Server」[後編]
- 実運用への道に近づいた、新しい「Nano Server」[前編]
- 明らかになった「Hyper-Vコンテナー」の正体(2)――コンテナーホストのセットアップ方法
- 明らかになった「Hyper-Vコンテナー」の正体(1)――その仕組みと管理方法
- ついに日本語版が登場、Windows Server 2016テクニカルプレビューこれまでのまとめ
- 仮想マシンのための「仮想TPM」――仮想化ベースのセキュリティ(その2)
- 物理マシンとユーザーのための「デバイスガード」と「資格情報ガード」――仮想化ベースのセキュリティ(その1)
- “Hyper-Vの中のHyper-V”で仮想マシンを動かす
- ADドメインはもう不要? ワークグループでクラスター作成が可能に――フェイルオーバークラスターの新機能(その3)
- 可用性をさらに高めるクォーラム監視オプション「クラウド監視」――フェイルオーバークラスターの新機能(その2)
- 短時間のノード障害に耐える仮想マシン――フェイルオーバークラスターの新機能(その1)
- WindowsコンテナーをDockerから操作するには?――あなたの知らないコンテナーの世界(その4)
- IISコンテナーの作成で理解するコンテナーのネットワーク機能――あなたの知らないコンテナーの世界(その3)
- 所要時間は1分未満! 今すぐできるWindows Serverコンテナーの作り方――あなたの知らないコンテナーの世界(その2)
- Windows ServerのDockerサポートとは?――あなたの知らないコンテナーの世界(その1)
- 注目のDockerサポートは? Nano Serverは?――Windows Server 2016 Technical Preview 3登場! 新機能ピックアップ
- 「Webアプリケーションプロキシ」はマルチデバイス環境におけるリモートアクセスの“要”
- クラウド時代のセキュリティ担保にはActive Directoryフェデレーションサービスが必須となる?
- 4ステップで理解する「ストレージレプリカ」のセットアップと構成方法
- 低コストでデータの災害復旧対策を実現する新たなSDS「ストレージレプリカ」とは
- 記憶域スペースの新機能「記憶域スペースダイレクト」を理解する(後編)
- 記憶域スペースの新機能「記憶域スペースダイレクト」を理解する(前編)
- Hyper-Vホストから仮想マシンゲストの操作を可能にするPowerShell Directとは
- Windows Server 2016世代のクラウド基盤の守護者、Host Guardian Serviceとは
- 注目のNano Server、その謎に迫る――コンテナー技術との関係はいかに?
筆者紹介
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2015)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 祝、Windows 7のWindows 10無償アップグレード! でも、古いPCで動くの?
Windows 7/8.1は「Windows 10」の提供開始後1年間は無償でアップグレードできることが発表されました。わが家には10年前の古いWindows 7 PCがあります。無償ならWindows 10にしたいところですが、果たして古いPCで動くのか。ちょっと心配になってきました。 - 続報、Windows 10って、古いPCでも本当に動くの?
「Windows 10」は、Windows 7およびWindows 8.1(Enterpriseエディションは対象外)のユーザーに1年間の限定で無償アップグレードが提供される予定です。以前、この発表の直後に筆者は古いPCでWindows 10が動くかどうかを検証しました。今回はその続報です。 - Windows 10の発売日が決定! パッチ適用トラブルの迷宮から抜けられる日は近い?
ある日突然襲い掛かるWindows Updateの不調。筆者はつい先日もトラブルに遭遇したばかりです。Windows 10では「Windows Update」が新しくなるようですが、毎月のように繰り返される“トラブルの迷宮”から抜けられる日は来るのでしょうか。 - 「Windows 10を入手する」アプリは表示されましたか――Windows 10の無料アップグレード予約が開始
Windows 10が「2015年7月29日」にリリースされることが正式発表されました。この発表に合わせ、無料アップグレード対象のPCでは「Windows 10を入手する」アプリによる無償アップグレードの案内と予約が始まりました。 - 「Windows 10を入手する」アプリとは? その概要とタスクトレイに表示させない方法
2015年6月から、「Windows 10を入手する」というアプリがWindows Update経由で配布されている。不要ならアンインストールや表示させない設定が可能だ。その複数の手段を解説。