如何将 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[]),其中包含具有 SiteEmail 等属性的 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 仅用于在控制台上显示。
它只提供数据的 查看

希望对您有所帮助