Office 365 Powershell - 格式化 foreach-object 循环的输出
Office 365 Powershell - Formatting the output of a foreach-object loop
大家晚上好,
Powershell 仍然很新,但我一直在尝试将一些脚本放在一起,以便更轻松地报告我们需要从客户的 Office 365 租户中提取的大量信息。
该脚本已经做了我需要它做的事情(从租户那里获取订阅,从我的 CSV 中获取订阅的友好名称,然后写入控制台),但是我的问题是关于格式:我会喜欢将此输出格式化为 table 列 headers 订阅、活动、暂停、已分配。
$sku = Get-MsolAccountSku | select-object skupartnumber,ActiveUnits,suspendedUnits,ConsumedUnits | sort-object -property skupartnumber
$skudata = import-csv -Header friendlyname,skupartnumber "C:\PShell\SKUs.csv" | where-object {$sku.skupartnumber -eq $_.skupartnumber} | sort-object -property skupartnumber
$skudata | foreach-object {$n = 0}{write-host $skudata.friendlyname[$n], $sku.ActiveUnits[$n], $sku.SuspendedUnits[$n], $sku.ConsumedUnits[$n]; $n = $n + 1}
## Output:
POWER BI (FREE) 1000000 0 1
MICROSOFT TEAMS EXPLORATORY 100 0 6
这是脚本和输出,我现在正在使用 write-host,因为它以我们已经想要的方式格式化数据,我可以轻松地将它从控制台复制到我们的门票。但是,当我使用 write-output 时,它会将每个单元格放在自己的行上,我似乎无法弄清楚如何将其通过管道传输到 format-table .
$skudata | foreach-object {$n = 0}{write-output $skudata.friendlyname[$n], $sku.ActiveUnits[$n], $sku.SuspendedUnits[$n], $sku.ConsumedUnits[$n]; $n = $n + 1}
# Output:
POWER BI (FREE)
1000000
0
1
MICROSOFT TEAMS EXPLORATORY
100
0
6
我已经能够使用下面的哈希 table 和简单的脚本获得我需要的一切,唯一的问题是它无法提取通用订阅名称,Microsoft 的 skupartnumber 标识符是最佳选择这并不总是非常具有描述性。我确定我只是缺少一些非常简单的解决方案,但如果有人能为我尝试过的任何一种解决方案指出正确的方向,我将不胜感激!
$subs = @{Label="Subscription"; Expression={$_.skupartnumber}; Alignment = "right";}
$active = @{Label="Active"; Expression={$_.ActiveUnits}; Alignment = "right"}
$assigned = @{Label="Assigned"; Expression={$_.ConsumedUnits}; Alignment = "right"}
$suspended = @{Label="Suspended"; Expression={$_.SuspendedUnits}; Alignment = "right"}
Get-MsolAccountSku | Format-Table $subs, $active, $suspended, $assigned -autosize
# Output:
Subscription Active Suspended Assigned
------------ ------ --------- --------
POWER_BI_STANDARD 1000000 0 1
TEAMS_EXPLORATORY 100 0 6
PowerShell 是一种面向对象的语言,您需要的是在对象中收集您想要的信息以供进一步处理或输出。
尝试
$result = for ($n = 0; $n -lt $skudata.Count; $n++) {
# output the data as PSObject that gets collected in variable $result
[PsCustomObject]@{
Subscription = $skudata.friendlyname[$n]
Active = $sku.ActiveUnits[$n]
Suspended = $sku.SuspendedUnits[$n]
Assigned = $sku.ConsumedUnits[$n]
}
}
# output on screen
$result | Format-Table -AutoSize
# output to CSV
$result | Export-Csv -Path "C:\PShell\SkuUsage.csv" -NoTypeInformation
大家晚上好,
Powershell 仍然很新,但我一直在尝试将一些脚本放在一起,以便更轻松地报告我们需要从客户的 Office 365 租户中提取的大量信息。
该脚本已经做了我需要它做的事情(从租户那里获取订阅,从我的 CSV 中获取订阅的友好名称,然后写入控制台),但是我的问题是关于格式:我会喜欢将此输出格式化为 table 列 headers 订阅、活动、暂停、已分配。
$sku = Get-MsolAccountSku | select-object skupartnumber,ActiveUnits,suspendedUnits,ConsumedUnits | sort-object -property skupartnumber
$skudata = import-csv -Header friendlyname,skupartnumber "C:\PShell\SKUs.csv" | where-object {$sku.skupartnumber -eq $_.skupartnumber} | sort-object -property skupartnumber
$skudata | foreach-object {$n = 0}{write-host $skudata.friendlyname[$n], $sku.ActiveUnits[$n], $sku.SuspendedUnits[$n], $sku.ConsumedUnits[$n]; $n = $n + 1}
## Output:
POWER BI (FREE) 1000000 0 1
MICROSOFT TEAMS EXPLORATORY 100 0 6
这是脚本和输出,我现在正在使用 write-host,因为它以我们已经想要的方式格式化数据,我可以轻松地将它从控制台复制到我们的门票。但是,当我使用 write-output 时,它会将每个单元格放在自己的行上,我似乎无法弄清楚如何将其通过管道传输到 format-table .
$skudata | foreach-object {$n = 0}{write-output $skudata.friendlyname[$n], $sku.ActiveUnits[$n], $sku.SuspendedUnits[$n], $sku.ConsumedUnits[$n]; $n = $n + 1}
# Output:
POWER BI (FREE)
1000000
0
1
MICROSOFT TEAMS EXPLORATORY
100
0
6
我已经能够使用下面的哈希 table 和简单的脚本获得我需要的一切,唯一的问题是它无法提取通用订阅名称,Microsoft 的 skupartnumber 标识符是最佳选择这并不总是非常具有描述性。我确定我只是缺少一些非常简单的解决方案,但如果有人能为我尝试过的任何一种解决方案指出正确的方向,我将不胜感激!
$subs = @{Label="Subscription"; Expression={$_.skupartnumber}; Alignment = "right";}
$active = @{Label="Active"; Expression={$_.ActiveUnits}; Alignment = "right"}
$assigned = @{Label="Assigned"; Expression={$_.ConsumedUnits}; Alignment = "right"}
$suspended = @{Label="Suspended"; Expression={$_.SuspendedUnits}; Alignment = "right"}
Get-MsolAccountSku | Format-Table $subs, $active, $suspended, $assigned -autosize
# Output:
Subscription Active Suspended Assigned
------------ ------ --------- --------
POWER_BI_STANDARD 1000000 0 1
TEAMS_EXPLORATORY 100 0 6
PowerShell 是一种面向对象的语言,您需要的是在对象中收集您想要的信息以供进一步处理或输出。
尝试
$result = for ($n = 0; $n -lt $skudata.Count; $n++) {
# output the data as PSObject that gets collected in variable $result
[PsCustomObject]@{
Subscription = $skudata.friendlyname[$n]
Active = $sku.ActiveUnits[$n]
Suspended = $sku.SuspendedUnits[$n]
Assigned = $sku.ConsumedUnits[$n]
}
}
# output on screen
$result | Format-Table -AutoSize
# output to CSV
$result | Export-Csv -Path "C:\PShell\SkuUsage.csv" -NoTypeInformation