Как я могу изменить System.Array в System.Object? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть переменная, хранящаяся как 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

Когда я пытаюсь экспортировать эту переменную как файл, она отображается в том же формате.Так как это неверная структура таблицы (показано ниже), я не могу использовать эти данные, когда пытаюсь использовать их в 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.

Затем я попытался перебрать все элементы в массиве, а затем создать объект для каждогоitem, перед добавлением его в «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'.

Есть идеи, как мне это обойти?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Мне кажется, у вас есть массив (System.Object[]), содержащий объекты PSObject со свойствами Site, Email и т. Д. Подобная структура идеально подходит для экспорта в файл CSV, который затем можно импортировать в приложение с электронными таблицами, например, в Excel.

Для этого вы используете командлет Export-Csv следующим образом:

$ExternalUsers | Export-Csv -Path 'PATH AND FILENAME FOR THE OUTPUT CSV FILE' -NoTypeInformation 

Если вывод, который вы показываете, завершен, кажется, что в массиве только один элемент. Вы можете проверить это, посмотрев на $ExternalUsers.Count.

Я не совсем уверен, что вы подразумеваете под "Так как это неверная структура таблицы" , потому что вы можете довольно легко отобразить ее как таблицу, используя

$ExternalUsers | Format-Table -AutoSize

Вывод в окне консоли:

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

Если вам нужно меньше свойств, просто переберите массив и выберите свойства, которые вы хотите сохранить от объектов в нем:

$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 предназначен только для отображения на консоли.
Он НЕ предоставляет ничего, кроме представления данных.

Надеюсь, это поможет

0 голосов
/ 14 мая 2019

использование:

$TestObject = @()

и указывать не нужно (-Property $ ExternalUsers)

$Test = New-Object -TypeName PSObject 
...