web-dev-qa-db-ja.com

PowerShellを使用したHyper-VでWindows2008 R2 VM)のIPアドレスを取得するにはどうすればよいですか?

Hyper-V2016で新しいVMをビルドするための自動ビルドスクリプトを作成しました。2008R2VMと、2012 R2/2016VMに接続するためのIPアドレスを取得する方法が必要になる場合があります。次のようなPowerShellを使用することです。

get-vm -Name $VMName|Get-VMNetworkAdapter|Select-Object -ExpandProperty IpAddresses

2012/2016には最適ですが、2008 R2VMで空のアレイを返します。 Powershellを使用してHyper-VからIPアドレスを取得する方法に関するアイデアはありますか?スクリプトはWindows10ワークステーションから実行されています。

[〜#〜]編集[〜#〜]

私は試した get-vm -name $VMName|Get-WmiObject -Class Win32_NetworkAdapterConfigurationテストとして、多くのアダプター出力の後にこれを取得しました:

Get-WmiObject:コマンドがパイプライン入力を受け取らないか、入力とそのプロパティがパイプライン入力を受け取るパラメーターのいずれとも一致しないため、入力オブジェクトをコマンドのパラメーターにバインドできません。

[〜#〜]ソリューション[〜#〜]

これは私がやったことです:

$VMName = <the name of my vm>
Invoke-Command -Session $VMHostSession -ScriptBlock {
    $Vm = Get-WmiObject -Namespace root\virtualization\v2 -Query "Select * From Msvm_ComputerSystem Where ElementName='$using:VMName'";
    $vm.GetRelated("Msvm_KvpExchangeComponent").GuestIntrinsicExchangeItems | % { ` 
        $GuestExchangeItemXml = ([XML]$_).SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Name']/VALUE[child::text()='NetworkAddressIPv4']"); 

        if ($GuestExchangeItemXml -ne $null) 
        { 
            $GuestExchangeItemXml.SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Data']/VALUE/child::text()").Value; 
        }    
    }
}
3
Mark Allison

WMIを使用できます。たぶん2008R2にはあなたが探しているフィールドがありません。

get-vm -Name $VMName | Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computername $_ | select-object IPAddress

複数ある場合は、選択しているネットワークカードでフィルタリングを行う必要がある場合もあります。 get-wmiobjectに直接パイプされるかどうかわからないため、get-vmが出力しているものを確認する必要がある場合もあります。それをforeach-objectにパイプして、その方法でコンピューター名を取得する必要があるかもしれません。

****編集****

get-vm -Name $VMName | foreach-object { Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computername $_.name } | select-object IPAddress

お役に立てれば。

ありがとう、ティム。

0
Tim Haintz