Exchange ActiveSync Device Liste in große weltweit verteile Umgebung
Hallo @all,
ich muss regelmäßig eine Liste aller Exchange Active Sync Geräte erstellen.
Ein entsprechende Powershell Script ist vorhanden und erfüllt prima seinen zweck. leider lässt die Geschwindigkeit zu wünschen übrig. (9-12 Stunden bei ca. 10.000 EAS Geräten)
Bei dem weltweit verseiltem und per WAN verbundenen Exchange System eigentlich keine große Überraschung. aber kennt jemand noch einen schnelleren Weg?
Hat jemand Erfahrung mit so verteilten Systemen?
Bin für jede Hilfe dankbar.
/Jojo
Um es kurz zu beschreiben. Hier die wichtigsten Code Zeilen.
ich muss regelmäßig eine Liste aller Exchange Active Sync Geräte erstellen.
Ein entsprechende Powershell Script ist vorhanden und erfüllt prima seinen zweck. leider lässt die Geschwindigkeit zu wünschen übrig. (9-12 Stunden bei ca. 10.000 EAS Geräten)
Bei dem weltweit verseiltem und per WAN verbundenen Exchange System eigentlich keine große Überraschung. aber kennt jemand noch einen schnelleren Weg?
Hat jemand Erfahrung mit so verteilten Systemen?
Bin für jede Hilfe dankbar.
/Jojo
Um es kurz zu beschreiben. Hier die wichtigsten Code Zeilen.
$CASMailboxes = Get-CASMailbox -Filter {HasActivesyncDevicePartnership -eq $true} -ResultSize Unlimited -IgnoreDefaultScope | Where-Object {$_.DisplayName -notlike "CAS_{*"}
ForEach ($CASMailbox in $CASMailboxes)
{
$Devices = Get-ActiveSyncDeviceStatistics -Mailbox $CASMailbox.Identity
$User = Get-User -Identity $CASMailbox.Identity
$Mailbox = Get-Mailbox -Identity $CASMailbox.Identity
ForEach ($Device in $Devices)
{
$Obj = New-Object PSObject
$Obj | Add-Member NoteProperty -Name "MailboxName" -Value $CASMailbox.Name
$Obj | Add-Member NoteProperty -Name "Mail" -Value $CASMailbox.PrimarySmtpAddress
$Obj | Add-Member NoteProperty -Name "GID" -Value $Mailbox.CustomAttribute2
$Obj | Add-Member NoteProperty -Name "NetID" -Value $Mailbox.CustomAttribute7
$Obj | Add-Member NoteProperty -Name "Office" -Value $Mailbox.Office
$Obj | Add-Member NoteProperty -Name "Department" -Value $User.Department
$Obj | Add-Member NoteProperty -Name "CountryOrRegion" -Value $User.CountryOrRegion
$Obj | Add-Member NoteProperty -Name "Company" -Value $User.Company
$Obj | Add-Member NoteProperty -Name "City" -Value $User.City
$Obj | Add-Member NoteProperty -Name "DeviceType" -Value $Device.DeviceType
$Obj | Add-Member NoteProperty -Name "DeviceId" -Value $Device.DeviceId
$Obj | Add-Member NoteProperty -Name "DeviceModel" -Value $Device.DeviceModel
$Obj | Add-Member NoteProperty -Name "DeviceIMEI" -Value $Device.DeviceIMEI
$Obj | Add-Member NoteProperty -Name "DeviceOS" -Value $Device.DeviceOS
$Obj | Add-Member NoteProperty -Name "DeviceUserAgent" -Value $Device.DeviceUserAgent
$Obj | Add-Member NoteProperty -Name "DeviceFriendlyName" -Value $Device.DeviceFriendlyName
$Obj | Add-Member NoteProperty -Name "FirstSyncTime" -Value $Device.FirstSyncTime.ToShortDateString()
$Obj | Add-Member NoteProperty -Name "LastSyncAttemptTime" -Value $Device.LastSyncAttemptTime.ToShortDateString()
$Obj | Add-Member NoteProperty -Name "LastSuccessSync" -Value $Device.LastSuccessSync.ToShortDateString()
$Obj | Add-Member NoteProperty -Name "DevicePolicy" -Value $Device.DevicePolicyApplied
$Obj | Add-Member NoteProperty -Name "DeviceActiveSyncVersion" -Value $Device.DeviceActiveSyncVersion
$Obj | Add-Member NoteProperty -Name "IsRemoteWipeSupported" -Value $Device.IsRemoteWipeSupported
$Obj | Add-Member NoteProperty -Name "DeviceAccessState" -Value $Device.DeviceAccessState
$Obj | Add-Member NoteProperty -Name "DeviceAccessStateReason" -Value $Device.DeviceAccessStateReason
$Obj | Add-Member NoteProperty -Name "DeviceAccessControlRule" -Value $Device.DeviceAccessControlRule
$Obj | Add-Member NoteProperty -Name "NumberOfFoldersSynced" -Value $Device.NumberOfFoldersSynced
$Obj | Add-Member NoteProperty -Name "ServerName" -Value $CASMailbox.ServerName.ToUpper()
}
$return += $Obj
$return | Export-Csv -Path $outFile -Delimiter (Get-Culture).TextInfo.ListSeparator -Encoding UTF8 -NoTypeInformation
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 310837
Url: https://administrator.de/forum/exchange-activesync-device-liste-in-grosse-weltweit-verteile-umgebung-310837.html
Ausgedruckt am: 20.04.2025 um 08:04 Uhr
9 Kommentare
Neuester Kommentar

Hi,
creating objects like this
Use the optimized version available starting with PS 3.0
But creating custom objects is not needed here. You could instead use calculated properties in a select statement, this would again save much time because you can directly pipe it to export-csv in one step.
Regards
creating objects like this
New-Object PSObject
is slow.Use the optimized version available starting with PS 3.0
[pscustomobject] @{Column1=Value1;Column2=Value2;ColumnN=ValueN}
Regards
Hi,
"-IgnoreDefaultScope" suggeriert mir, dass das auch mehrere Domänen sind? Falls ja, läufst Du wahrscheinlich schneller, wenn Du entweder auf Parallel Tasking umstellst und je Domäne einen Task parallel laufen lässt. Oder je Domäne ein Script und alle parallel ausführen. Aber sowas über WAN abzufragen dauert sowieso. Hier könnte Remote Scripting abhelfen, also die Script-Ausführung auf den Servern am Standort auszulösen und abschließend die Ergebnisse einzusammeln.
Vielleicht kann Kollege @colinardo da was aus dem Ärmel schütteln?
E.
"-IgnoreDefaultScope" suggeriert mir, dass das auch mehrere Domänen sind? Falls ja, läufst Du wahrscheinlich schneller, wenn Du entweder auf Parallel Tasking umstellst und je Domäne einen Task parallel laufen lässt. Oder je Domäne ein Script und alle parallel ausführen. Aber sowas über WAN abzufragen dauert sowieso. Hier könnte Remote Scripting abhelfen, also die Script-Ausführung auf den Servern am Standort auszulösen und abschließend die Ergebnisse einzusammeln.
Vielleicht kann Kollege @colinardo da was aus dem Ärmel schütteln?
E.

Zitat von @jojo.ac:
it looks like there is no difference between using hash tables or not in this script.
This is not a hashtable, this results in a custom object.it looks like there is no difference between using hash tables or not in this script.
Anyhow I could use this in an other script to speed up.
Parallel processing like @emeriks said.In my case it looks like the WAN is the issue.
Maybe splitting it up will be the best option.
Make a "workflow"-script with parallel processing and psremoting.Maybe splitting it up will be the best option.