【PowerShell】Hyper-V 系コマンドレットを手元の Windows 7 から実行するには ~ Import-PSSession

Windows Developer Day 2012 のセッション資料締切も目前なのに、すっかり PowerShell づいています。

前回、前々回とリモーティングの話を書いてきました。

リモートにあるサーバーを、手元のクライアントから操作する...などというのが主な使い方になりますが、今後は PowerShell ワークフローをキックしたり、結果を取得したりといった方法にも活用することになります。

で、リモーティングに関してもう数点ご紹介しておきたい機能があります。

そのうちの1つが、Import-PSSession というコマンドレットです。

ご存知ない方も多いのではないかと。このコマンドレットは、PowerShell 2.0 でサポートされました。

PowerShell では Invoke-Command というコマンドレットにより、リモートコンピューターにコマンドを投げることができます。

ただ、コンソールで対話しているときに Invoke-Command を頻繁に入力するのって疲れるんです。面倒なのです。キーッってなるのです。

PS C:\> Invoke-Command -ComputerName Server1 -ScriptBlock {Get-VM}

Enter-PSSession で PSSession に入り込んでもいいのですが、プロンプトが長くなるので、これも キーッ となるのです。

PS> Enter-PSSession -ComputerName Server1 [Server1]: PS > Get-VM

じゃ、手元のマシンに Module をインストールすることができるのか...といえば、出来るものもあるし、できないものもあります。

RSAT(Remote Server Administration Tool)をインストールすると、Active Directory 関連の PowerShell モジュールはインストールすることができます。

image

ちょっと中途半端ですよね。

そこで、Import-PSSession コマンドレットです。

image

Import-PSSession を使用すると、PSSession を張ったリモートコンピューターから、指定したコマンドレットやモジュールをローカルに取り込むことができます。

以下のように使います。

はじめにリモートコンピューターとの間に PSSession を作成します。

PS C:\> $S = New-PSSession -ComputerName Server1 -Name testsession

次に、Import-Session を使用して、リモートコンピューターから使用したいコマンドレットまたはモジュールを取り込みます。以下の例では、Hyper-V モジュールを指定し、 Hyper-V 系コマンドレットを全てとりこんでいます。

PS C:\> Import-PSSession -Session $S -Module Hyper-V

ModuleType Name ExportedCommands ---------- ---- ---------------- Script tmp_c4aumigk.g4m {Add-VMDvdDrive, Add-VMFibreChannelHba, Add-VMHardDiskDrive, Add-VMMi...

これで Hyper-V モジュールに含まれるすべてのコマンドレットが取り込まれました。

tmp_c4aumigk.g4m がローカルコンピューターでのモジュール名になるので、こいつを使ってコマンドレットの一覧を見てみると以下の通りです。

PS C:\> Get-Command -Module tmp_c4aumigk.g4m

Capability Name ModuleName ---------- ---- ---------- Script Add-VMDvdDrive tmp_c4aumigk.g4m Script Add-VMFibreChannelHba tmp_c4aumigk.g4m Script Add-VMHardDiskDrive tmp_c4aumigk.g4m Script Add-VMMigrationNetwork tmp_c4aumigk.g4m Script Add-VMNetworkAdapter tmp_c4aumigk.g4m Script Add-VMNetworkAdapterAcl tmp_c4aumigk.g4m Script Add-VMRemoteFx3dVideoAdapter tmp_c4aumigk.g4m Script Add-VMScsiController tmp_c4aumigk.g4m Script Add-VMStoragePath tmp_c4aumigk.g4m Script Add-VMSwitch tmp_c4aumigk.g4m Script Add-VMSwitchExtensionPortFeature tmp_c4aumigk.g4m Script Add-VMSwitchExtensionSwitchFeature tmp_c4aumigk.g4m Script Checkpoint-VM tmp_c4aumigk.g4m ・ ・ ・

これで、心置きなく Hyper-V 関連のコマンドレットを使用することができます。

ただし、注意が2点。

  • コマンドレットはリモートコンピューターとの PSSession 上で実行されます
  • コマンドレットが使えるのは、PSSession が生きている間です。PSSession が切断されるとコマンドレットも消滅しますので注意してください。

なお、万が一ローカルに同じ名前のコマンドレットが存在する場合には、アラートが表示されて当該コマンドレットは取り込まれません。既存のコマンドレットを一時的に上書きしてでも取り込みたい...といった場合には -DisableNameChecking を指定して Import しましょう。