我目前正在尝试使用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;。
答案 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,C1
,A,B,C2
和A,B,C3
。在循环的每次迭代中,您需要计算所有排列,例如在您的情况下,由columnB和columnC生成的排列。
使用ForEach-Object
cmdlet进行流水线操作也应该可以做到这一点,但这比较困难,因为你提到了与powershell的相对较新的关系,我不会追求这条路径,除非你想要学习粗略。