UPDATE: Danke an Sergej für die genaue Kontrolle meiner Scripts, anscheinend ist das sonst keinem aufgefallen, aber ich hab da an ziemlichen Denkfehler drin. Der Abschnitt mit dem berechnen für das Alter der Logs ist etwas falsch, da müsste die Anweisung natürlich so aussehen:
if ($ActiveSyncStat.LastsuccessSync -ne
$null) {
$Zualt
= ((((Get-Date)-($ActiveSyncStat.LastSuccessSync)).days) -gt
$DaysOld)
} else {
$zuAlt
=
$false
}
Sonst noch Verbesserungsvorschläge jederzeit gern!
LG Christoph
Wie wir alle wissen bin ich ja doch ein grosser Fan von Powershell und den durchaus vielfältigen Möglichkeiten. Jetzt hab ich die vergangene Woche damit verbracht bei einem Kunden einen Workshop zu halten bei dem es primär darum ging per Powershell Exchange zu administrieren. Angefangen von Grundlagen wie funktioniert Powershell gings natürlich auch bis in die Eingeweide von Exchange. Sehr interessant und ich hab auch wieder viel gelernt. Warum zum Beispiel diese zeile nix liefert versteh ich noch immer nicht:
(Get-Mailbox unbekannt).emailaddresses.add("test@hatahet.eu")
Weil, man würde ja erwarten, das er sich aus dem Get-Mailbox die ProxyAddressCollection holt und diese dann einfach um die gegebene Adresse erweitert und als Ganzes zurück liefert. Tut er aber nicht. Kann mir das jemand erklären? Ich kanns nicht.
Aber – ganz spannend was wir so gebastelt haben. Ich poste da mal ein Script für das ich natürlich wie immer keinerlei Gewähr übernehme, alles zur eigenen Gefahr aber ich denke es is recht interessant.
$ServerURL
=
Read Host
$DaysOld
= 31
$Credential
=
Get-Credential
Import-PSSession (New-PSSession
-ConfigurationName
microsoft.exchange
-ConnectionUri
$ServerURL
-Credential
$Credential) -AllowClobber
# Filter all Users having partnerships
$Mailboxes
= Get-Recipient -Filter {HasActiveSyncDevicePartnership -eq
$true}
$ActiveSyncObjects
=
New-Object
System.Collections.Arraylist
foreach ($Mailbox
in
$Mailboxes) {
# get ActiveSync statistics for the given Mailbox
$ActiveSyncStats
= Get-ActiveSyncDeviceStatistics -Mailbox $Mailbox.SamAccountNAme -ErrorAction SilentlyContinue
# check if we found ActiveSync stats
if($ActiveSyncStats
-ne
$null) {
# loop through all stats
foreach ($ActiveSyncStat
in
$ActiveSyncStats) {
$ZuALt
=
New-Object
System.Boolean
if ($ActiveSyncStat.LastsuccessSync -ne
$null) {
$Zualt
= ((($ActiveSyncStat.LastSuccessSync - (Get-Date)).days) -lt
$DaysOld)
} else {
$zuAlt
=
$false
}
$Stats
=
New-Object
PSObject
-property @{
PrimarySMTPAddress =
$Mailbox.PrimarySmtpAddress
LastSuccessSync =
$ActiveSyncStat.LastSuccessSync
FirstSyncTime =
$ActiveSyncStat.FirstSYncTime
DeviceType =
$ActiveSyncStat.DeviceType
DeviceUserAgent =
$ActiveSyncStat.DeviceUserAgent
ZuAlt =
$ZuAlt
}
$ActiveSyncObjects
+=
$Stats
}
}
}
$ActiveSyncObjects
Zu den grossen Fragen was das Ding eigentlich tut kann man nur sagen. Eigentlich nix besonderes. Wir holen uns zu allererst alle Mailboxen die eine ActiveSync Partnerschaft eingetragen haben. Danach schaun wir ein wenig wie alt diese Partnerschaften sind anhand des LastSuccessSync Dates und speichern das Ganze in einer netten Liste. Spannend zu sehen das wir pro User zwischen 3-10 ActiveSync partnerschaften haben die auch manchmal das ein oder andere Jahr alt sind ;)
Kommentare werden gern entgegen genommen.
LG Christoph