none
Выгрузка пользователей из Office 365 RRS feed

  • Вопрос

  • Добрый день! Есть задачка выгрузить пользователей из office 365 и затем поотбирать лицензии у некоторых неактивных  пользователей.

    Перед написанием полноценного скрипта, я бы хотел немного поэкспериментировать с несколькими пользователеями(то есть ограничить выгрузку 5-ю пользователями, т.к. в реале их около 20к)

    Тут я получаю 5-ть пользователей,у кого есть лицензия и нужные мне свойства

    Get-MsolUser -all | Where-Object {
    $_. islicensed -eq $true}| Select-Object  -First 5 -Property *| Format-List -Property DisplayName,UserPrincipalName,Licenses,WhenCreated


    Для того чтобы понять, активен ли пользователь или нет, нужно выполнить команду get-mailboxstatistics и вытащить свойство LastLogonTime, MailboxGuid. 

    Тут я получаю нужные мне свойства почтового ящика,но теряются свойства пользователя DisplayName,ucerprincipalname,Licenses,WhenCreated:

    Get-MsolUser -all | Where-Object {
    $_. islicensed -eq $true}| Select-Object  -First 5 -Property *| ForEach-Object {
    Get-MailboxStatistics -Identity $_.userprincipalname }| Select-Object -Property LastLogonTime, MailboxGuid


    Подскажите пожалуйста, как мне объединить 2 этих блока таким образом, чтобы для тех 5 человек из 1 части, выполнялся цикл get-mailboxstatistics, но не терялись свойства DisplayName,ucerprincipalname,Licenses,WhenCreated, а в результате дозаписывались в итоговую выгрузку вида: DisplayName,ucerprincipalname,Licenses,WhenCreated, Lastlogontime, MailboxGuid?

    Заранее спасибо!



Ответы

  • https://www.petri.com/understanding-powershell-custom-properties-with-select-object-cmdlet

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-6

    @{n="LastLogonTime";e={$m.LastLogonTime}} - Создаем новое вычисляемое поле, название поля на наш выбор LastLogonTime, вычисляемое содержимое {$m.LastLogonTime}. Где объект $m содержит данные выполнения команды Get-MailboxStatistics ,где присутсвует поле LastLogonTime.

    Полный синтаксис:

    @{Name = ""; Expression = {}} или @{Label = ""; Expression = {}} 

    Сокращенная версия:

    @{n="";e={}} или @{l="";e={}}

    • Помечено в качестве ответа prophecy666 4 мая 2018 г. 10:03
    Отвечающий
  • Добавить разделить, например запятую:

    $_.Licenses.AccountSKUid -join ","

    Или делать отдельную запись под каждую лицензию:

    foreach ($i in $_.Licenses.AccountSKUid) {
    	$_ | Select DisplayName,UserPrincipalName,@{n="Licenses Type";e={$i}},WhenCreated,@{n="LastLogonTime";e={$m.LastLogonTime}},@{n="MailboxGuid";e={$m.MailboxGuid}}
    }

    • Помечено в качестве ответа prophecy666 7 мая 2018 г. 11:44
    Отвечающий
  • Get-MsolUser -all | Where-Object {$_.islicensed -eq $true}| Select-Object -First 5 |  ForEach-Object {
    	$m = Get-MailboxStatistics -Identity $_.userprincipalname 
    	$_ | Select DisplayName,UserPrincipalName,Licenses,WhenCreated,@{n="LastLogonTime";e={$m.LastLogonTime}},@{n="MailboxGuid";e={$m.MailboxGuid}}
    }

    • Помечено в качестве ответа prophecy666 3 мая 2018 г. 13:06
    Отвечающий

Все ответы

  • Get-MsolUser -all | Where-Object {$_.islicensed -eq $true}| Select-Object -First 5 |  ForEach-Object {
    	$m = Get-MailboxStatistics -Identity $_.userprincipalname 
    	$_ | Select DisplayName,UserPrincipalName,Licenses,WhenCreated,@{n="LastLogonTime";e={$m.LastLogonTime}},@{n="MailboxGuid";e={$m.MailboxGuid}}
    }

    • Помечено в качестве ответа prophecy666 3 мая 2018 г. 13:06
    Отвечающий
  • Спасибо. А можно поподробнее насчет этой строчки по синтаксису? Что тут происходит? не очень понятно
    @{n="LastLogonTime";e={$m.LastLogonTime}},@{n="MailboxGuid";e={$m.MailboxGuid}}
  • https://www.petri.com/understanding-powershell-custom-properties-with-select-object-cmdlet

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-6

    @{n="LastLogonTime";e={$m.LastLogonTime}} - Создаем новое вычисляемое поле, название поля на наш выбор LastLogonTime, вычисляемое содержимое {$m.LastLogonTime}. Где объект $m содержит данные выполнения команды Get-MailboxStatistics ,где присутсвует поле LastLogonTime.

    Полный синтаксис:

    @{Name = ""; Expression = {}} или @{Label = ""; Expression = {}} 

    Сокращенная версия:

    @{n="";e={}} или @{l="";e={}}

    • Помечено в качестве ответа prophecy666 4 мая 2018 г. 10:03
    Отвечающий
  • Добрый день! Есть еще вопрос: При выгрузке в CSV возникла проблема с полем Licenses. Если скрипт оставить так как есть, то при выгрузке,в столбце Licenses будет следующее: System.Collections.Generic.List`1[Microsoft.Online.Administration.UserLicense]

    Насколько я понял, это связано с тем что это массив, т.к. лицензий у пользователя может быть больше одной. Я сделал вычисляемое поле по вашей аналогии:

    Get-MsolUser -MaxResults 5 | Where-Object {$_.islicensed -eq $true}| ForEach-Object {
    	$m = Get-MailboxStatistics -Identity $_.userprincipalname 
    	$_ | Select DisplayName,UserPrincipalName,@{n="Licenses Type";e={$_.Licenses.AccountSKUid}},WhenCreated,@{n="LastLogonTime";e={$m.LastLogonTime}},@{n="MailboxGuid";e={$m.MailboxGuid}}
    }|Export-Csv -Path C:\licenses.csv -Encoding UTF8 -Append -NoTypeInformation -Delimiter ";"

    Теперь все ок, в столбце пишутся лицензии, но они никак не разделяются. Если у пользователя 2 и более лицензии, то в столбце будет отображаться так: myorg:OFFICESUBSCRIPTION myorg:STANDARDPACK(то есть они просто пишутся в одной строке через пробел)

    Подскажите пожалуйста, есть ли возможность как-нибудь разделить эти лицензии, потому как при дальнейшей работе с фильтрами в Excel будет очень проблематично.

  • Добавить разделить, например запятую:

    $_.Licenses.AccountSKUid -join ","

    Или делать отдельную запись под каждую лицензию:

    foreach ($i in $_.Licenses.AccountSKUid) {
    	$_ | Select DisplayName,UserPrincipalName,@{n="Licenses Type";e={$i}},WhenCreated,@{n="LastLogonTime";e={$m.LastLogonTime}},@{n="MailboxGuid";e={$m.MailboxGuid}}
    }

    • Помечено в качестве ответа prophecy666 7 мая 2018 г. 11:44
    Отвечающий