Powershell,获取VM的ip4v地址

时间:2015-04-30 19:44:28

标签: powershell

我是PowerShell的新手,我试图只获取vm的IPv4地址并将其保存为字符串。

我可以获得所有网络属性:

PS C:\Windows\system32> get-vm | select -ExpandProperty networkadapters | select vmname, macaddress, switchname, ipaddres
sses

VMName                        MacAddress                    SwitchName                    IPAddresses
------                        ----------                    ----------                    -----------
foobar                                     vSwitch                       {192.0.2.1, fe80::84a...

我可以同时获得v4和v6 ip地址

PS C:\Windows\system32> $IP = ( GEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Get-VMNetworkAdapter).IpAddresses
PS C:\Windows\system32> $IP
192.0.2.1
fe80::d47e:
   ----------    

如何将v4地址作为字符串?

更新

看起来没有对象属性只包含v4地址

PS C:\Windows\system32> GEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Get-VMNetworkAdapter | Format-List -Property *


IovWeight                : 0
IovQueuePairsRequested   : 1
IovQueuePairsAssigned    : 0
IovInterruptModeration   : Default
IovUsage                 : 0
ClusterMonitored         : True
VirtualFunction          :
IsLegacy                 : False
IsManagementOs           : False
IsExternalAdapter        : False
Id                       : Microsoft:xxxxxxxxxxx
AdapterId                : xxxxxxxxxxx
DynamicMacAddressEnabled : True
MacAddress               : 00155D5B9B14
MacAddressSpoofing       : Off
SwitchId                 : xxxxxxxxxxx
Connected                : True
PoolName                 :
SwitchName               : vSwitch
AclList                  : {}
ExtendedAclList          : {}
IsolationSetting         : Microsoft.HyperV.PowerShell.VMNetworkAdapterIsolationSetting
CurrentIsolationMode     : Vlan
RoutingDomainList        : {}
DhcpGuard                : Off
RouterGuard              : Off
PortMirroringMode        : None
IeeePriorityTag          : Off
VirtualSubnetId          : 0
DynamicIPAddressLimit    : 0
StormLimit               : 0
AllowTeaming             : Off
VMQWeight                : 100
IPsecOffloadMaxSA        : 512
VmqUsage                 : 0
IPsecOffloadSAUsage      : 0
VFDataPathActive         : False
VMQueue                  :
MandatoryFeatureId       : {}
MandatoryFeatureName     : {}
VlanSetting              : Microsoft.HyperV.PowerShell.VMNetworkAdapterVlanSetting
BandwidthSetting         :
BandwidthPercentage      : 0
TestReplicaPoolName      :
TestReplicaSwitchName    :
StatusDescription        : {OK}
Status                   : {Ok}
IPAddresses              : {192.0.2.1, fe80::xxxxxxxxxxx}
ComputerName             : xxxxxxxxxxx
Name                     : Network Adapter
IsDeleted                : False
VMId                     : xxxxxxxxxxx
VMName                   : foobar
VMSnapshotId             : 00000000-0000-0000-0000-000000000000
VMSnapshotName           :
Key                      :                                                                                                                 

3 个答案:

答案 0 :(得分:4)

您可以过滤掉其中包含“:”的所有IP,如下所示:

$IP | ?{$_ -notmatch ':'}

答案 1 :(得分:1)

IPAddresses看起来像一个数组或列表,你只想要第一个,所以尝试:

$IP = ( GEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Get-VMNetworkAdapter).IpAddresses[0]

答案 2 :(得分:1)

假设只有1个V4地址,并且v4地址是第一个输出,请执行:

$IP = ( GEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Get-VMNetworkAdapter).IpAddresses | Select-String -List 1