如何从 powershell 中的 get-mobiledevicestatistics 获取准确的用户名

how to get exact user name from get-mobiledevicestatistics in 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

如果你有身份字段,看起来像这样

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

然后在 / 上拆分并得到第三个结果,您只需请求:

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

>UserName

PowerShell 从数字 0 开始索引,因此要请求列表中的第四个条目,我们请求索引号 3。

更新

OP 提到 OU 级别可能会有所不同,这意味着他不能指望固定位置来请求索引。为了适应这种情况,试试这个方法,它会查找 ExchangeActiveSyncDevices 的索引,然后选择之前的索引位置。

$_.Identity.Split('/')[($_.Identity.Split('/').Indexof('ExchangeActiveSyncDevices')-1)]

我没有测试这个的环境,但这不是你要找的吗?

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

这应该在其自己的行中输出他们拥有的每个设备的用户。然后,您可以轻松地将其导出到 Export-CSV 或类似的东西。

我们保存 $user 以便稍后在管道中可用。也可以使用 Add-Member 但结果是一样的。

Get-Mailbox -resultsize unlimited|foreach {Get-MobileDeviceStatistics -Mailbox:$_.identity} |Select-Object @{l="user";e={$_.Identity.parent.parent.name}}, lastsuccesssync
on e2k13