【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 しましょう。

Comments (0)

Skip to main content