Не удается экспортировать зарегистрированные устройства Get-MsolDevice в CSV

#powershell

#powershell

Вопрос:

Я написал простой скрипт, который пытается использовать входные данные из исходного CSV-файла, содержащего идентификаторы объектов в столбце, а затем экспортировать следующую информацию; DisplayName , DeviceTrustType RegisteredOwners , ApproximateLastLoginTimeStamp Get-MsolDevice с помощью вр команда. Вот код, который у меня есть на данный момент:

 Connect-MsolService
Connect-AzureAD

Get-AzureADDevice -All $True | Select ObjectID | Export-Csv "C:tempProjectIntuneDevicesAllAADObjectIDs.csv" -noType

$allobjects = Import-Csv "C:tempProjectIntuneDevicesAllAADObjectIDs.csv"

ForEach ($line in $allobjects)
{
 Get-MsolDevice -ObjectID $line.ObjectId | Select DisplayName,DeviceTrustType,RegisteredOwners,ApproximateLastLogonTimestamp| Export-Csv -Path "C:tempProjectIntuneDevicesFinal.csv" -Append -NoTypeInformation
}
  

Проблема в том, что когда я открываю Final.csv, запись для RegisteredOwners отображается как System.Collections.Generic.List`1[System.String]

Когда я просто запускаю команду с терминала без экспорта в CSV, поэтому на экране отображается oputput, это выглядит нормально, я вижу, что RegisteredOwner перечисленные в фигурных скобках, как {username@domain.org} .

Я читал, что это потому, что вывод для RegisteredOwners представляет собой элемент списка, а не простой текст, как остальные выходные данные, но у меня чертовски много времени на преобразование его в строку. Я пробовал такие вещи, как вставка

 Select -Property DisplayName,@{ n='RegisteredOwners'; e={ $_.RegisteredOwners -join ';' } }
  

Но это приводит к ошибкам во время выполнения, независимо от того, какие варианты я пробовал с ним.

Я был бы очень признателен за любую помощь в этом, поскольку я искал и пробовал несколько решений, но ни одно из них не работает для меня. TIA

Комментарии:

1. Какую ошибку вы получаете в выражении свойства? Я нашел другой сайт с пользователем, у которого был тот же вопрос, и решением было создание пользовательского свойства, как вы пытаетесь.

Ответ №1:

Спасибо, что подтолкнул меня в правильном направлении, Бендер, оказывается, у меня, должно быть, была какая-то синтаксическая ошибка, которую я не понял. Вот окончательный код, и он работает так, как задумано.

 ## Script to collect all AzureAD registered devices, their trust type, and their owner.

## Connect to AzureAD and MSOL
Connect-MsolService
Connect-AzureAD

## Get all devices filtering their ObjectID
Get-AzureADDevice -All $True | Select ObjectID | Export-Csv "C:tempProjectIntuneDevicesAllAADObjectIDs.csv" -noType

## Create the variable from the expoted Csv
$allobjects = Import-Csv "C:tempProjectIntuneDevicesAllAADObjectIDs.csv"

## Create a new file using Column 1 of allobjects.csv entries to suss the information required for each device
ForEach ($line in $allobjects)
{
 Get-MsolDevice -ObjectID $line.ObjectId | Select DisplayName,DeviceTrustType,@{ n='RegisteredOwners'; e={ $_.RegisteredOwners -join ';' } },ApproximateLastLogonTimestamp | Export-Csv -Path "C:tempProjectIntuneDevicesFinal.csv" -Append -NoTypeInformation
}