使用"子数组"导出数组;

时间:2017-04-11 10:13:18

标签: arrays powershell

我目前正在尝试使用PowerShell在多个合作伙伴租户中自动执行Office 365中的许可证计数。

我当前的代码(从互联网上获得)经过一些修改后给了我这个输出:

Column A     Column B     Column C
--------     --------     --------
CustA        LicA,LicB    1,3
CustB        LicA,LicB    7,3
CustC        LicA         4

但是我想从这段代码得到的输出是:

Column A     Column B     Column C
--------     --------     --------
CustA        LicA         1
             LicB         3
CustB        LicA         7
             LicB         3

以下是我使用var jObject = JObject.Parse(json); foreach (KeyValuePair<string, JToken> kvp in jObject) { // Your code. } 导出的当前代码:

Export-Csv -NoType

我已经尝试过这个以及其他几个代码迭代,这些迭代都是破坏性的:

$tenantID = (Get-MsolPartnerContract).tenantid        

foreach($i in $tenantID){
    $tenantName = Get-MsolPartnerInformation -TenantId $i
    $tenantLicense = Get-MsolSubscription -TenantId $i
    $properties = [ordered]@{
        'Company' = ($tenantName.PartnerCompanyName -join ',')
        'License' = ($tenantLicense.SkuPartNumber -join ',')
        'LicenseCount' = ($tenantLicense.TotalLicenses  -join ',')
    }

    $obj = New-Object -TypeName psobject -Property $properties
    Write-Output $obj
}

我正在考虑制作一个&#34;子阵列&#34; $properties = [ordered]@{ 'Company' = ($tenantName.PartnerCompanyName -join ','), @{'License' = ($tenantLicense.SkuPartNumber -join ',')}, @{'LicenseCount' = ($tenantLicense.TotalLicenses -join',')} } $tenantLicense.SkuPartnumber,但我不太确定如何将其附加到对象或&#34; main-array&#34;。

2 个答案:

答案 0 :(得分:1)

每个$tenantLIcense的第二个循环应该可以帮到你。我无法访问像您这样的环境,因此无法对此进行测试。

$tenantID | ForEach-Object{
    $tenantName = Get-MsolPartnerInformation -TenantId $_
    $tenantLicense = Get-MsolSubscription -TenantId $_

    # Make an object for each $tenantLicense
    $tenantLicense | ForEach-Object{
        $properties = [ordered]@{
            'Company' = $tenantName.PartnerCompanyName
            'License' = $_.SkuPartNumber
            'LicenseCount' = $_.TotalLicenses
        }

        # Send the new object down the pipe.
        New-Object -TypeName psobject -Property $properties
    }
}

由于您有多个具有相同公司名称的$tenantLicenses,因此只需循环显示这些名称并在输出中使用相同的公司名称即可。假设这有效,它就不会有你想要的相同输出,因为没有逻辑可以在后续行中省略公司。我认为这种方式更好,因为您可以在不丢失数据/理解的情况下对数据进行排序。

请注意,我将foreach()更改为ForEach-Object。这使得将对象发送到管道更简单。

答案 1 :(得分:0)

如果不提供代码解决方案,我可以说你需要构建数组。 在编程方面,您需要迭代数组ARRAY1并使用额外的行填充另一个ARRAY2。例如,如果列A,B是简单值而C是3个项目的数组,那么您将在新表中添加3行A,B,C1A,B,C2A,B,C3。在循环的每次迭代中,您需要计算所有排列,例如在您的情况下,由columnB和columnC生成的排列。

使用ForEach-Object cmdlet进行流水线操作也应该可以做到这一点,但这比较困难,因为你提到了与powershell的相对较新的关系,我不会追求这条路径,除非你想要学习粗略。