【发布时间】:2020-09-06 11:26:31
【问题描述】:
我试图获取物理网络适配器的 IP 配置详细信息,同时排除所有虚拟网络适配器。我的脚本如下:
$NetAdaptIndex = Get-NetAdapter -Physical | Select -Property InterfaceIndex -ExpandProperty InterfaceIndex
## Get Ip address, Gateway and DNS details as per configuration
$IPAddressConfig = foreach ($II in $NetAdaptIndex) {
Write-Host $II -ForegroundColor Yellow
Get-NetIPConfiguration |
Where-Object { $_.InterfaceIndex -eq $II} |
Select-Object InterfaceAlias, InterfaceDescription, InterfaceIndex, Ipv4Address, IPv4DefaultGateway, DNSServer
}
当我调用该变量时,我得到以下结果,其中 IPv4Address、IPv4DefaultGateway 和 DNSServer 未以字符串格式返回。
PS C:\WINDOWS\system32> $IPAddressConfig
InterfaceAlias : WiFi 2
InterfaceDescription : D-Link DWA-171 Wireless AC Dual Band Adapter
InterfaceIndex : 46
IPv4Address : {192.168.0.103}
IPv4DefaultGateway : {MSFT_NetRoute (InstanceID = ":8:8:8:9:55?@55;C?8;@B8:8;55;")}
DNSServer : {MSFT_DNSClientServerAddress (Name = "46", CreationClassName = "", SystemCreationClassName = "", SystemName = "23"), MSFT_DNSClientServerAddress (Name = "46", CreationClassName = "", SystemCreationClassName = "", SystemName = "2")}
InterfaceAlias : Ethernet
InterfaceDescription : Broadcom NetLink (TM) Gigabit Ethernet
InterfaceIndex : 10
IPv4Address : {169.254.149.208}
IPv4DefaultGateway :
DNSServer : {MSFT_DNSClientServerAddress (Name = "10", CreationClassName = "", SystemCreationClassName = "", SystemName = "23"), MSFT_DNSClientServerAddress (Name = "10", CreationClassName = "", SystemCreationClassName = "", SystemName = "2")}
但如果我要手动删除 Select-Object 代码,它会返回格式正确的结果。
Get-NetIPConfiguration |
Where-Object { $_.InterfaceIndex -eq 46}
观察 IPv4Address、IPv4DefaultGateway 和 DNSServer 如何返回格式正确的结果。
InterfaceAlias : WiFi 2
InterfaceIndex : 46
InterfaceDescription : D-Link DWA-171 Wireless AC Dual Band Adapter
NetProfile.Name : <removed>
IPv6Address : <removed>
IPv4Address : 192.168.0.103
IPv6DefaultGateway : <removed>
IPv4DefaultGateway : 192.168.0.1
DNSServer : 2001:f40:0:3::12:68
2001:4860:4860::8888
1.1.1.1
8.8.8.8
我的问题是为什么会这样?有什么方法可以用来将它们转换为正确的格式吗?后一种格式是我想要的格式。
【问题讨论】:
-
Select-object 将类型从 netipconfiguration 更改为 pscustomobject,但是没有这样的类型可以将其转换回来?
-
@js2010 好吧,这个快速而肮脏的黑客没有奏效:
(Get-NetIPConfiguration | Select-Object ComputerName, DNSServer) | %{$_.PSTypeNames.Insert(0, 'NetIPConfiguration') ; $_} -
@beatcracker 或这个
Get-NetIPConfiguration | % { [pscustomobject]@{ipv4address = $_.ipv4address;dnsserver=$_.dnsserver;ipv4defaultgateway=$_.ipv4defaultgateway;pstypename='netipconfiguration'}} -
我在下面添加了一个伪答案,以解释我为达到最终解决方案而采取的进一步步骤。 @beatcracker 的答案是正确的答案。
标签: powershell