web-dev-qa-db-ja.com

PowerShellとPowerShellISEおよびPowerGUIの仮想マシンリスト

どこから取得しようとしているかによって、なぜ異なる情報があるのか​​混乱しています。 Hyper-Vを実行している3つのWindows2012サーバー(G0、G1、およびG2)があります。次の状況は、スクリプトを実行して他のサーバーを制御するために使用する1つのサーバーからキャプチャされます。

私がやろうとしているのは、これら3台のマシンに存在する仮想マシンのリストを取得することです。

PowerGUIおよびPowerShell ISEを使用

PS > Get-VMHost | select name

Name                                                                                               
----                                                                                               
G0.nothing.com                                                                       
G2.nothing.com                                                                           
G1.nothing.com                                                                           


PS > Get-VMHost | Get-VM | select name

Name                                                                                               
----                                                                                               
VM1628856-4                                                                                        
VM1628856-2                                                                                        
VM1628856-6                                                                                        
VM1628856-3                                                                                        
VM1628856-1                                                                                        
VM1628856-5                                                                                        

PowerShellを使用

PS > Get-VMHost | select name

Name
----
G0


PS > Get-VM

Name         State       CPUUsage(%) MemoryAssigned(M) Uptime   Status
----         -----       ----------- ----------------- ------   ------
VM1107610-1  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1390728-1  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-1  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-10 OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-2  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-3  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-4  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-5  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-6  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-7  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-8  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1393540-9  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage
VM1833022-1  OffCritical 0           0                 00:00:00 Cannot connect to virtual machine configuration storage

私の主な懸念は、3つのツールからの信頼できる情報がないことです。 Hyper-V Managerアプリケーションは、PowerShellと同じリストを表示します。しかし、他の2つのツールからスクリプトを実行する場合、これは私が主に行うことですが、同じ情報を利用できないため、同じVMを操作することはできません。

また、Virtual Machine Managerには、最初の2つのツールであるPowerGUIとPowerShellISEと同じVMのリストが表示されていることにも気づきました。

どの情報が有効ですか?また、VMの正しいリストを取得するにはどうすればよいですか?

編集1

$env:psmodulepath値:

PS > $env:psmodulepath
C:\Users\administrator\Documents\WindowsPowerShell\Modules;
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\;
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\;
C:\Program Files\Microsoft System Center 2012\Virtual Machine Manager\bin\Configuration Providers\;
C:\Program Files\Microsoft System Center 2012\Virtual Machine Manager\bin\psModules\;
C:\Program Files (x86)\QLogic Corporation\QInstaller\Modules

編集2

PowerShellはこのHyper-Vモジュールを使用しています:C:\ Windows\Microsoft.Net\Assembly\GAC_MSIL\Microsoft.HyperV.PowerShell\v4.0_6.3.0。 0__31bf3856ad364e35\Microsoft.HyperV.PowerShell.dll

そして、PowerGUIはこれを使用しています:C:\ Windows\System32\WindowsPowerShell\v1.0\Modules\Hyper-V\Hyper-V.psd1

PowerShellが使用するモジュールをPowerGUIにロードしようとすると、同じ異なる結果が得られます。

PowerGUIまたはHyper-Vを使用して、PowerShell ISEにリストされている正しい情報を受け取るにはどうすればよいですか?

2
slybloty

2つの異なるHyper-VPowerShellモジュールを使用していると思います。

NAME
  Get-VMHost

SYNOPSIS
  Lists Hyper-V servers registered with Active Directory.

これは pshyperv.codeplex.com のGet-VMhostコマンドレットであり、複数のHyper-Vホスト(ケース3)が一覧表示されます。

NAME
  Get-VMHost

SYNOPSIS
 Gets a Hyper-V Host.

これは、サーバー2012+上のHyper-V 3に付属するGet-VMhostコマンドレットであり、特定の1つのホストに関する情報を一覧表示するだけで、複数のホストを一覧表示することはありません。

両方のモジュールがロードされている場合、ISEはこれらのモジュールでPoweShellとは異なる設定を選択しているようです。

2012年に組み込みのコマンドレットがある場合、サードパーティのコマンドレットは使用しません。混乱を招くだけで、確かに混乱します。

あなたの$env:psmodulepathの価値は何ですか?

5
Peter Hahndorf

ピーターは正しい方向に進んでいるようです。やってみました:

  1. Remove-Moduleコマンドレットを使用してPSコンソールからMicrosoft.HyperV.PowerShell.dllモジュールを削除する
  2. PowerGUIで参照されているモジュールをインポートしますか?

このコマンドを使用して、コマンドが正しいモジュールから使用されていることを確認します。

Get-Module (get-command Get-VMHost).ModuleName | select Name, Path

または、インポートされたモジュールを確認した後、完全修飾名を使用します。

Hyper-V\Get-VMHost "hyperv01svr"
1
Bin