Json 到 Powershell 中的 CSV

Json to CSV in Powershell

我正在使用 Powershell,使用 Invoke-LogAnalyticsQuery.

通过 LogAnalyticsQuery 模块查询 Azure 日志分析

我有结果

{
    "tables": [
        {
            "name": "PrimaryResult",
            "columns": [
                {"name": "Computer","type": "string"},
                {"name": "TimeGenerated","type": "datetime"},
                {"name": "AggregatedValue","type": "real"
                }
            ],
            "rows": [
                ["VPN-Server","2018-02-20T07:30:00Z",5.083333333333333],
                ["SARMAD-SurfacePro4","2018-02-20T07:30:00Z",14.598250052664012],
                ["VPN-Server","2018-02-20T07:00:00Z",4.9523809523809526],
                ["SARMAD-SurfacePro4","2018-02-20T07:00:00Z",12.104500129109331],
                ["SARMAD-SurfacePro4","2018-02-20T08:00:00Z",20.936097813082174],
                ["VPN-Server","2018-02-20T08:00:00Z",4.245614035087719]
            ]
        }
    ]
}

从上面的示例中,如何使用 powershell 将其转换为这样的东西?:

Reportname, Computer, TimeGenerated, AggregatedValue

Manual Value, JsonValue, JsonValue, JsonValue

您可以使用 convertfrom-json 并最终可以使用 export-csv 导出:

$a='{"tables":[{"name":"PrimaryResult","columns":[{"name":"Computer","type":"string"},{"name":"TimeGenerated","type":"datetime"},{"name":"AggregatedValue","type":"real"}],"rows":[["VPN-Server","2018-02-20T07:30:00Z",5.083333333333333],["SARMAD-SurfacePro4","2018-02-20T07:30:00Z",14.598250052664012],["VPN-Server","2018-02-20T07:00:00Z",4.9523809523809526],["SARMAD-SurfacePro4","2018-02-20T07:00:00Z",12.104500129109331],["SARMAD-SurfacePro4","2018-02-20T08:00:00Z",20.936097813082174],["VPN-Server","2018-02-20T08:00:00Z",4.245614035087719]]}]}'
($a | ConvertFrom-Json).tables.columns.name

希望对您有所帮助。

你可以这样做:

function Get-Tables
{
    param([Parameter(ValueFromPipeline=$true)]$Json)

    process
    {
        foreach ($table in ($Json | ConvertFrom-Json).tables)
        {
            foreach ($row in $table.rows)
            {
                $result = New-Object PSObject
                $columnIndex = 0

                foreach ($column in $table.columns)
                {
                    Add-Member -InputObject $result -MemberType NoteProperty -Name $column.Name -Value ($row[$columnIndex++])
                }

                $result
            }
        }
    }
}

$json | Get-Tables | Export-Csv

其中 $json 是字符串变量,其值来自问题示例。

$json = '{  "tables": [   ...  ] }'