将包含多个数组的 Powershell 对象导出到 CSV/Power BI
Exporting a Powershell object containing multiple arrays to CSV/Power BI
今天是星期五,我的大脑不工作了!我有一个 Powershell 对象,它是我想用作 Power BI 数据集的 DSInternals Test-PasswordQuality cmdlet 的结果;它是一堆用户帐户数组,例如
ClearTextPassword : {}
LMHash : {someuser, another user...}
EmptyPassword : {someuser, another user}
WeakPassword : {someuser, another user...}
DefaultComputerPassword : {etc...}
PasswordNotRequired : {etc...}
PasswordNeverExpires : {etc...}
AESKeysMissing : {etc...}
PreAuthNotRequired : {}
DESEncryptionOnly : {}
Kerberoastable : {}
DelegatableAdmins : {}
SmartCardUsersWithPassword : {}
DuplicatePasswordGroups : {}
我想将其导出到一个 csv,其中每个数组都是它自己的列。如果我只是做
$result | export-csv .\result.csv -NoTypeInformation
我确实为每个数组得到一列,但随后每一列中的用户都合并到一个单元格中。
example of first few columns
我怎样才能得到相同的,但每个用户都在自己的单元格中?
或者,如何使用 MicrosoftPowerBIMgmt 模块将此 PS 对象直接放入 Power BI 数据集中?
谢谢大家!
此答案中的对象是您的最小表示,旨在演示您可以使用的方法。
首先需要计算出所有属性的最大元素个数,为此,我们可以访问PSObject.Properties
and for each value, get it's count. Then, we can use a for
loop进行重构。
$object = [pscustomobject]@{
ClearTextPassword = @()
EmptyPassword = @('someuser', 'another user', 'yet another')
WeakPassword = @('someuser', 'another user')
DefaultComputerPassword = @('etc')
PasswordNotRequired = @(1,2,3,4,5)
}
$max = [System.Linq.Enumerable]::Max($object.PSObject.Properties.ForEach({ $_.Value.Count }))
$result = for($i = 0; $i -lt $max; $i++) {
$outObject = [ordered]@{}
foreach($prop in $object.PSObject.Properties) {
$outObject[$prop.Name] = $prop.Value[$i]
}
[pscustomobject]$outObject
}
$result | Format-Table
上面的示例将导致以下结果 object[]
,这对于导出到 CSV 应该是完美的。
ClearTextPassword EmptyPassword WeakPassword DefaultComputerPassword PasswordNotRequired
----------------- ------------- ------------ ----------------------- -------------------
someuser someuser etc 1
another user another user 2
yet another 3
4
5
今天是星期五,我的大脑不工作了!我有一个 Powershell 对象,它是我想用作 Power BI 数据集的 DSInternals Test-PasswordQuality cmdlet 的结果;它是一堆用户帐户数组,例如
ClearTextPassword : {}
LMHash : {someuser, another user...}
EmptyPassword : {someuser, another user}
WeakPassword : {someuser, another user...}
DefaultComputerPassword : {etc...}
PasswordNotRequired : {etc...}
PasswordNeverExpires : {etc...}
AESKeysMissing : {etc...}
PreAuthNotRequired : {}
DESEncryptionOnly : {}
Kerberoastable : {}
DelegatableAdmins : {}
SmartCardUsersWithPassword : {}
DuplicatePasswordGroups : {}
我想将其导出到一个 csv,其中每个数组都是它自己的列。如果我只是做
$result | export-csv .\result.csv -NoTypeInformation
我确实为每个数组得到一列,但随后每一列中的用户都合并到一个单元格中。
example of first few columns
我怎样才能得到相同的,但每个用户都在自己的单元格中?
或者,如何使用 MicrosoftPowerBIMgmt 模块将此 PS 对象直接放入 Power BI 数据集中?
谢谢大家!
此答案中的对象是您的最小表示,旨在演示您可以使用的方法。
首先需要计算出所有属性的最大元素个数,为此,我们可以访问PSObject.Properties
and for each value, get it's count. Then, we can use a for
loop进行重构。
$object = [pscustomobject]@{
ClearTextPassword = @()
EmptyPassword = @('someuser', 'another user', 'yet another')
WeakPassword = @('someuser', 'another user')
DefaultComputerPassword = @('etc')
PasswordNotRequired = @(1,2,3,4,5)
}
$max = [System.Linq.Enumerable]::Max($object.PSObject.Properties.ForEach({ $_.Value.Count }))
$result = for($i = 0; $i -lt $max; $i++) {
$outObject = [ordered]@{}
foreach($prop in $object.PSObject.Properties) {
$outObject[$prop.Name] = $prop.Value[$i]
}
[pscustomobject]$outObject
}
$result | Format-Table
上面的示例将导致以下结果 object[]
,这对于导出到 CSV 应该是完美的。
ClearTextPassword EmptyPassword WeakPassword DefaultComputerPassword PasswordNotRequired
----------------- ------------- ------------ ----------------------- -------------------
someuser someuser etc 1
another user another user 2
yet another 3
4
5