Powershell pscustomobject格式 - 表新行而不是一行

时间:2016-06-30 21:55:57

标签: powershell export-to-csv newrow pscustomobject formattable

我对员工有一个非常大的JSON响应,我试图进入表格格式,导出到CSV并最终插入到SQL Server中。我能够确定如何从json文件中获取所有变量,但是现在我将所有值插入每列的一行而不是每个员工的新行。 此外,当我导出到CSV时,该值将变为System.Object []。

$json1 = Invoke-webRequest -Uri $Workeruri -Certificate $cert -Headers $WorkerHeader | convertfrom-json

$table = [PSCustomObject] @{
 associateOID = $json1.workers.associateOID
 workerID = $json1.workers.workerID.idValue 
 GivenName = $json1.workers.person.legalName.givenName
 MiddleName = $json1.workers.person.legalName.middleName
 FamilyName1 = $json.workers.person.legalName.familyName1 

 } |format-table -autosize
 $table | export-csv $filepath -NoTypeInformation

列是一个小样本,实际上可能有100列。但是,我的回复如下:

associateOID     workerID        givenName                                          
------------     --------        ---------                                                                                                                                                                                                                                           
{1,2,3,4,5...}  {a,b,c,d,e...}   {Lebron James, Micheal Jordan, Steph Curry...}

我希望它返回:

associateOID     workerID        givenName                                          
------------     --------        --------- 
1                 A              Lebron James
2                 B              Micheal Jordan
3                 C              Steph Curry

此外,导出到CSV时,响应具有正确的列,但所有列都返回:System.Object []。 此外,我的具有整数和日期的字段不会返回数据。我该如何解决这个问题?

我尝试过使用sort-object,group-object,for-each循环。没有任何效果。

2 个答案:

答案 0 :(得分:0)

你可以这样试试:

$json1 = Invoke-webRequest -Uri $Workeruri -Certificate $cert -Headers $WorkerHeader | ConvertFrom-Json

$table = $json1 | ForEach-Object {
    [PSCustomObject] @{
        associateOID = $_.workers.associateOID
        workerID = $_.workers.workerID.idValue 
        GivenName = $_.workers.person.legalName.givenName
        MiddleName = $_.workers.person.legalName.middleName
        FamilyName1 = $_.workers.person.legalName.familyName1
    }
}

$table | Export-Csv $filepath -NoTypeInformation

$table | Format-Table -AutoSize

您的代码段获取每列的所有值,并将它们存储在单个对象中,而不是迭代从JSON转换的对象集合。

此外,一旦您使用Format-Table,数据将被格式化以便显示,但不再在管道中使用。这就是我将屏幕上的显示和CSV导出分开的原因。

答案 1 :(得分:0)

@sodawillow几乎拥有它,假设json1.workers是包含您的工作程序的对象列表。

$json1 = Invoke-webRequest -Uri $Workeruri -Certificate $cert -Headers $WorkerHeader | ConvertFrom-Json

$table = $json1.workers | ForEach-Object {
    [PSCustomObject] @{
        associateOID = $_.associateOID
        workerID = $_.workerID.idValue 
        GivenName = $_.person.legalName.givenName
        MiddleName = $_.person.legalName.middleName
        FamilyName1 = $_.person.legalName.familyName1
    }
}

$table | Export-Csv $filepath -NoTypeInformation

$table | Format-Table -AutoSize