2015-04-30 21 views
1

的ip4v地址我是新来的PowerShell和我“米试图得到的只是一个虚拟机的IPv4地址,并将其保存为一个字符串PowerShell中,得到VM

我可以得到所有网络属性,像这样:

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

你可以只筛选出具有任何IP“:”在里面,因为这样:

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

IPAddresses看起来像一个数组或服务,您只想要第一个于是尝试:

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

不错,虽然该列表是基于0的。应该是IpAddresses [0] – spuder

+0

并非每个设备都将具有IPv4地址。 –

+0

@ Erti-ChrisEelmaa只会举例,不熟悉'Get-VM' cmdlet。你是对的,取决于其他反应可能会回来的。如果第一个项目总是你想要的那个,直接引用它是一种方式 –

1

假设只有1 V4地址,该地址V4是第一输出,这样做:

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