Как получить точное имя пользователя из get-mobiledevicestatistics в powershell

У меня есть небольшой скрипт для получения информации обо всех пользовательских мобильных устройствах с сервера Exchange 2013.

Get-Mailbox -ResultSize Unlimited | 
ForEach {Get-MobileDeviceStatistics -Mailbox:$_.Identity} |
Select-Object @{label="User" ; expression={$_.Identity}},DeviceOS, lastsuccesssync

Я просто хочу получить точное имя пользователя вместо пути в AD. Как я могу сделать это в expression={?}

Вот еще один скрипт для этого, он дает мне имя пользователя, но все устройства, принадлежащие пользователю, находятся не в отдельных строках, а в одной строке...

$EASMailboxes = Get-CASMailbox -Filter {HasActiveSyncDevicePartnership -eq $True -and DisplayName -notlike "CAS_{*"} | Get-Mailbox
$EASMailboxes | Select-Object DisplayName, PrimarySMTPAddress, @{Name="Mobile Devices";Expression={(Get-MobileDeviceStatistics -Mailbox $_.Identity).DeviceOS}} | 
Out-GridView

3 ответа

Решение

У меня нет среды, чтобы проверить это, но разве это не то, что вы ищете?

Get-Mailbox -ResultSize Unlimited | ForEach {
    $user = $_.SamAccountName
    Get-MobileDeviceStatistics -Mailbox:$_.Identity |
    Select-Object @{label="User" ; expression={$user}},DeviceOS, lastsuccesssync
}

Это должно выводить пользователя для каждого устройства, им принадлежащего на его собственной линии. Вы можете легко экспортировать это в Export-CSV или что-то подобное.

Мы сохраняем $user так что доступно позже в трубе. Мог бы также использовать Add-Member но результат был бы таким же.

Если у вас есть поле идентичности, которое выглядит так

domain.com/Users/OU/UserName/ExchangeActiveSyncDevices/iPhone

Затем разделить на / и для получения третьего результата вы просто запрашиваете:

$_.Identity.Split("/")[3]

>UserName

PowerShell начинает индексирование с нуля, поэтому для запроса четвертой записи в списке мы запрашиваем индекс № 3.

Обновить

OP отметил, что уровень OU может варьироваться, что означает, что он не может рассчитывать на фиксированную позицию для запроса индекса. Чтобы приспособиться к этому сценарию, попробуйте этот метод, который будет искать индекс ExchangeActiveSyncDevices и затем выбирать позицию индекса до этого.

$_.Identity.Split('/')[($_.Identity.Split('/').Indexof('ExchangeActiveSyncDevices')-1)]
Get-Mailbox -resultsize unlimited|foreach {Get-MobileDeviceStatistics -Mailbox:$_.identity} |Select-Object @{l="user";e={$_.Identity.parent.parent.name}}, lastsuccesssync
on e2k13
Другие вопросы по тегам