#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
}