首页 > 解决方案 > Powershell:使用 Get-NetIPConfiguration 获取 DHCP 状态?

问题描述

我是一个powershell新手。

如果我运行,Get-NetIPConfiguration -Detailed我可以看到 IPv4 DHCP 状态。这是一个好的开始——我花了很多时间在谷歌上搜索才走到这一步:

PS C:\Windows\system32> Get-NetIPConfiguration -Detailed

ComputerName                          : VM-172-26-39-24
InterfaceAlias                        : Ethernet
InterfaceIndex                        : 6
InterfaceDescription                  : Red Hat VirtIO Ethernet Adapter
NetCompartment.CompartmentId          : 1
NetCompartment.CompartmentDescription : Default Compartment
NetAdapter.LinkLayerAddress           : FA-16-3E-FF-0D-60
NetAdapter.Status                     : Up
NetProfile.Name                       : Network
NetProfile.NetworkCategory            : Public
NetProfile.IPv6Connectivity           : NoTraffic
NetProfile.IPv4Connectivity           : Internet
IPv6LinkLocalAddress                  : fe80::x:x:x:x
IPv4Address                           : 172.26.39.249
IPv6DefaultGateway                    :
IPv4DefaultGateway                    : 172.26.36.1
NetIPv6Interface.NlMTU                : 9000
NetIPv4Interface.NlMTU                : 9000
NetIPv6Interface.DHCP                 : Enabled
NetIPv4Interface.DHCP                 : Disabled
DNSServer                             : x.x.x.x
                                        x.x.x.x

但是如果我运行类似的东西 Get-NetIPConfiguration -Detailed | select InterfaceAlias,NetIPv4Interface.DHCP

我得到一个空字段?

PS C:\Windows\system32> Get-NetIPConfiguration -Detailed | `
select InterfaceAlias, NetIPv4Interface.DHCP

InterfaceAlias NetIPv4Interface.DHCP
-------------- ---------------------
Ethernet          

难道我做错了什么?

如果我删除尾随的 .DHCP(“里面有什么?”),我看不到任何可识别的东西

PS C:\Windows\system32> Get-NetIPConfiguration -Detailed | select InterfaceAlias, NetIPv4Interface

InterfaceAlias NetIPv4Interface
-------------- ----------------
Ethernet       MSFT_NetIPInterface (Name = "@55?55;", CreationClassName = "", SystemCreationClassName = "", SystemName = "")

标签: windowspowershell

解决方案


在 Select 语句中使用时需要计算 sub 属性:

Get-NetIPConfiguration -Detailed | `
select InterfaceAlias, @{N="DHCP";E={$_.NetIPv4Interface.DHCP}}

或者试试这个:

Get-NetIPConfiguration | Select -ExpandProperty NetIPv4Interface | Select InterfaceAlias,DHCP

...或者您可以只检索配置,将其放入变量中,然后获取所需的子属性:

$Config = Get-NetIPConfiguration

$Config | forEach {
    [pscustomobject]@{InterFaceAlias=$_.InterFaceAlias;DHCP=$_.NetIPv4Interface.DHCP}
}

推荐阅读