繁体   English   中英

将PowerShell对象转换为JSON,特别是IP地址

[英]Convert PowerShell object to JSON, in particular IP address

需要获取有关网络接口的一些信息:

> Get-NetIPConfiguration | select IPv4Address, InterfaceAlias, InterfaceDes    cription | ConvertTo-Json

响应

[
    {
        "IPv4Address":  [
                            "MSFT_NetIPAddress (Name = \";C?8;@B8CC8;??55;:55;55;\", CreationClassName = \"\", SystemCr
eationClassName = \"\", SystemName = \"\")"
                        ],
        "InterfaceAlias":  "wifi",
        "InterfaceDescription":  "Qualcomm Atheros AR5BWB222 Wireless Network Adapter"
    },
    {
        "IPv4Address":  [
                            "MSFT_NetIPAddress (Name = \";@C8???8;??8??B55;@55;55;\", CreationClassName = \"\", SystemC
reationClassName = \"\", SystemName = \"\")"
                        ],
        "InterfaceAlias":  "Ethernet",
        "InterfaceDescription":  "Realtek PCIe GBE Family Controller"
    }
]

这看起来很奇怪。 我期望像这样:

[
    {
        "IPv4Address": "12.3.3.4",
        "InterfaceAlias":  "wifi",
        "InterfaceDescription":  "Qualcomm Atheros AR5BWB222 Wireless Network Adapter"
        "NetAdapter.Status" : "connected"
    },
    {
        "IPv4Address":  "192.168.0.1",
        "InterfaceAlias":  "Ethernet",
        "InterfaceDescription":  "Realtek PCIe GBE Family Controller"
        "NetAdapter.Status" : "connected"
    }
]

还需要获取连接或断开连接的接口状态,它存储在NetAdapter.Status 请帮忙。 最好将它们全部写成一行。

您需要更深入地遍历对象:

Get-NetIPConfiguration | select IPv4Address, InterfaceAlias, InterfaceDescription | 
  ConvertTo-Json -Depth 5

默认情况下,powershell只会深度3级

不在一行...

$n = Get-NetIPConfiguration | select InterfaceIndex, IPv4Address, InterfaceAlias, InterfaceDescription, NetAdapter
ForEach( $a in $n ){
    $a.Ipv4Address =  $a.Ipv4Address.IpAddress
    $a | Add-Member -type NoteProperty -name Status -value $a.NetAdapter.Status
    $a.PSObject.Properties.Remove('NetAdapter')
}

$n
$n | ConvertTo-Json

结果:

InterfaceIndex       : 10
IPv4Address          : 192.168.99.135
InterfaceAlias       : wifi
InterfaceDescription : Qualcomm Atheros AR5BWB222 Wireless Network Adapter
Status               : Up

InterfaceIndex       : 16
IPv4Address          : 169.254.153.248
InterfaceAlias       : Ethernet
InterfaceDescription : Realtek PCIe GBE Family Controller
Status               : Disconnected

[
    {
        "InterfaceIndex":  10,
        "IPv4Address":  "192.168.99.135",
        "InterfaceAlias":  "wifi",
        "InterfaceDescription":  "Qualcomm Atheros AR5BWB222 Wireless Network Adapter",
        "Status":  "Up"
    },
    {
        "InterfaceIndex":  16,
        "IPv4Address":  "169.254.153.248",
        "InterfaceAlias":  "Ethernet",
        "InterfaceDescription":  "Realtek PCIe GBE Family Controller",
        "Status":  "Disconnected"
    }
]

我敢肯定,还有更短的时间,可能是最佳方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM