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;
}
}
}
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
お役に立てれば。
ありがとう、ティム。