如何将 System.Array 更改为 System.Object?
How can I change a System.Array into a System.Object?
我有一个存储为 System.Array 的变量,显示为;
Site : https://value.sharepoint.com/
Email : value@value.co.uk
DisplayName : value
UniqueId : value
AcceptedAs : value@value.co.uk
WhenCreated : 24/01/2019 06:02:45
InvitedBy : value_value.co.uk#ext#@value.onmicrosoft.com
当我尝试将此变量导出为文件时,它以相同的格式显示。由于这不是 table 的正确结构(如下所示),因此当我尝试在 Power BI 中使用它时,我无法使用它。
Site Email ect
---- ---- ----
https://value.sharepoint.com/ value@value.co.uk ect
我需要将我的数据放入上面显示的结构中。我试过了;
$Test = New-Object -TypeName PSObject -Property $ExternalUsers
但是这会导致以下错误;
New-Object : Cannot convert 'System.Object[]' to the type 'System.Collections.IDictionary' required by parameter 'Property'. Specified method is not supported.
然后我尝试遍历数组中的所有项目,然后为每个项目创建一个对象,然后将其添加到 "Master Object";
foreach($var in $ExternalUsers){
$Test = New-Object -TypeName PSObject -Property $ExternalUsers
$Test | Add-Member -MemberType NoteProperty -Name Site -Value $var.Site
$Test | Add-Member -MemberType NoteProperty -Name Email -Value $var.Email
$TestObject += $Test
}
这使每个项目都进入了正确的结构,但是当我尝试将所有项目添加回一个变量时,我得到了错误;
Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
有什么办法可以解决这个问题吗?
使用:
$TestObject = @()
无需指定 (-属性 $ExternalUsers)
$Test = New-Object -TypeName PSObject
对我来说,您似乎有一个数组 (System.Object[]
),其中包含具有 Site
、Email
等属性的 PSObject。
像这样的结构非常适合导出到 CSV 文件,然后您可以将其导入电子表格应用程序,例如 Excel。
为此,您可以像这样使用 cmdlet Export-Csv
:
$ExternalUsers | Export-Csv -Path 'PATH AND FILENAME FOR THE OUTPUT CSV FILE' -NoTypeInformation
如果您显示的输出是完整的,则数组中似乎只有一个元素。您可以通过查看 $ExternalUsers.Count
.
来检查这一点
我不太清楚你所说的 "As this is not in the correct structure for a table" 是什么意思,因为你可以很容易地使用
将其显示为 table
$ExternalUsers | Format-Table -AutoSize
控制台输出window:
Site Email DisplayName UniqueId AcceptedAs WhenCreated InvitedBy
---- ----- ----------- -------- ---------- ----------- ---------
https://value.sharepoint.com/ value@value.co.uk value value value@value.co.uk 24/01/2019 06:02:45 value_value.co.uk#ext#@value.onmicrosoft.com
如果你想要的是更少的属性,只需遍历数组并select你想从其中的对象中保留的属性:
$Shortened = $ExternalUsers | ForEach-Object {
$_ | Select-Object Site, Email
}
$Shortened | Format-Table -AutoSize
将产生:
Site Email
---- -----
https://value.sharepoint.com/ value@value.co.uk
我不喜欢 Power BI,但请记住 Format-Table
cmdlet 仅用于在控制台上显示。
它只提供数据的 查看 。
希望对您有所帮助
我有一个存储为 System.Array 的变量,显示为;
Site : https://value.sharepoint.com/
Email : value@value.co.uk
DisplayName : value
UniqueId : value
AcceptedAs : value@value.co.uk
WhenCreated : 24/01/2019 06:02:45
InvitedBy : value_value.co.uk#ext#@value.onmicrosoft.com
当我尝试将此变量导出为文件时,它以相同的格式显示。由于这不是 table 的正确结构(如下所示),因此当我尝试在 Power BI 中使用它时,我无法使用它。
Site Email ect
---- ---- ----
https://value.sharepoint.com/ value@value.co.uk ect
我需要将我的数据放入上面显示的结构中。我试过了;
$Test = New-Object -TypeName PSObject -Property $ExternalUsers
但是这会导致以下错误;
New-Object : Cannot convert 'System.Object[]' to the type 'System.Collections.IDictionary' required by parameter 'Property'. Specified method is not supported.
然后我尝试遍历数组中的所有项目,然后为每个项目创建一个对象,然后将其添加到 "Master Object";
foreach($var in $ExternalUsers){
$Test = New-Object -TypeName PSObject -Property $ExternalUsers
$Test | Add-Member -MemberType NoteProperty -Name Site -Value $var.Site
$Test | Add-Member -MemberType NoteProperty -Name Email -Value $var.Email
$TestObject += $Test
}
这使每个项目都进入了正确的结构,但是当我尝试将所有项目添加回一个变量时,我得到了错误;
Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
有什么办法可以解决这个问题吗?
使用:
$TestObject = @()
无需指定 (-属性 $ExternalUsers)
$Test = New-Object -TypeName PSObject
对我来说,您似乎有一个数组 (System.Object[]
),其中包含具有 Site
、Email
等属性的 PSObject。
像这样的结构非常适合导出到 CSV 文件,然后您可以将其导入电子表格应用程序,例如 Excel。
为此,您可以像这样使用 cmdlet Export-Csv
:
$ExternalUsers | Export-Csv -Path 'PATH AND FILENAME FOR THE OUTPUT CSV FILE' -NoTypeInformation
如果您显示的输出是完整的,则数组中似乎只有一个元素。您可以通过查看 $ExternalUsers.Count
.
我不太清楚你所说的 "As this is not in the correct structure for a table" 是什么意思,因为你可以很容易地使用
将其显示为 table$ExternalUsers | Format-Table -AutoSize
控制台输出window:
Site Email DisplayName UniqueId AcceptedAs WhenCreated InvitedBy
---- ----- ----------- -------- ---------- ----------- ---------
https://value.sharepoint.com/ value@value.co.uk value value value@value.co.uk 24/01/2019 06:02:45 value_value.co.uk#ext#@value.onmicrosoft.com
如果你想要的是更少的属性,只需遍历数组并select你想从其中的对象中保留的属性:
$Shortened = $ExternalUsers | ForEach-Object {
$_ | Select-Object Site, Email
}
$Shortened | Format-Table -AutoSize
将产生:
Site Email
---- -----
https://value.sharepoint.com/ value@value.co.uk
我不喜欢 Power BI,但请记住 Format-Table
cmdlet 仅用于在控制台上显示。
它只提供数据的 查看 。
希望对您有所帮助