Da sich die PowerShell Befehle für den Exchange Server großer Beliebtheit erfreuen, habe ich mal ein paar neue Befehle hinzugefügt.
Exchange Server – ActiveSync
Liste aller ActiveSync Geräte
Get-ActiveSyncDevice | ft
ActiveSync-Statistik eines Postfaches
Get-ActiveSyncDeviceStatistics -mailbox "manuel.maliszewski"
Alle ActiveSync Geräte der OU „Ausgeschiedene User“ löschen
Get-ActiveSyncDevice -OrganizationalUnit "Ausgeschiedene User" | Remove-ActiveSyncDevice
Exchange Server – Datenbanken
Übersicht über Datenbanken und deren Größe
Get-MailboxDatabase -Status | ft name, databasesize
Übersicht über Datenbanken mit Informationen zu Retentation und Recoverable Quotas
Get-MailboxDatabase | Select Name, Server, MailboxRetention, Recoverab* |ft
Exchange Server – Postfächer
Übersicht der Postfächer einer Datenbank – Sortiert nach letztem Login mit den Feldern: Benutzername, Größe, Datum der letzten Anmeldung, Letzte Anmeldung
Get-Mailbox -Database "Berlin II - Datenbank II" | Get-MailboxStatistics | Sort LastLogonTime | ft DisplayName, TotalItemSize, LastLogonTime, LastLoggedOnUserAccount
Detailiert Übersicht eines Postfaches mit Unterordnern und dessen Größe
Get-MailboxFolderStatistics -identity "manuel.maliszewski" | ft FolderPath, FolderSize, ItemsInFolder, FolderAndSubfolderSize
Alle Postfächer mit Weiterleitung
Get-Mailbox | Where-Object { $_.ForwardingAddress –ne $null } | Select Name, ForwardingAddress
Alle Postfächer mit „Sende als“ und „volle Postfachberechtigung“
Get-Mailbox | Get-ADPermission | Where-Object { ($_.ExtendedRights -like "*send-as*") -and -not ($_.User -like "nt authority\self") }
Postfächer auf die der Benutzer „chilli“ volle Berechtigungen hat
Get-Mailbox | Get-MailboxPermission | Where-Object { ($_.AccessRights -eq "*fullaccess*") -and ($_.User -like "*chilli*") }
Exchange Server – Warteschlange
Warteschlange anzeigen auf Server S8K011
Get-Queue -Server S8K011
Warteschlangen Queue verschieben
./Move-TransportDatabase.ps1 –QueueDatabasepath “C:\Queue” –QueueDatabaseLoggingPath “D:\Queue”
Exchange Server – System
Alle Exchange-Dienste starten
Test-ServiceHealth | Select ServicesNotRunning | foreach { Start-Service $_.ServicesNotRunning }
Exchange-Dienste Status in Tabelle
Test-ServiceHealth | ft
Testet die Exchange Organisation auf Fehler
Test-SystemHealth
Exchange Server – Verschiedenes
Sprache aller Postfächer auf dem Server S8K011 auf Deutsch setzen
Get-Mailbox -Server S8K011 | Set-Mailbox -language de-DE
Sprache der Postfächer auf Server S8K012 anzeigen, nach Sprache sortieren und als Tabelle mit Namen und Sprache anzeigen
Get-Mailbox -Server S8K012 | sort Languages | ft name, Languages
Liste der Benutzer die den Abwensenheitsassistenten aktiviert haben
Get-Mailbox | Get-MailboxAutoReplyConfiguration | Where-Object { $_.AutoReplyState –eq “scheduled” }
Datenbank – RPC CAS abfragen
Get-MailboxDatabase -Server s8k011 | fl name, rpc\*
Datenbank-Index
Standardmäßig werden alle Datenbanken mit aktiviertem Index angelegt. in diesem Ordner wird der Index erstellt: %datenbankpfad%\CatalogData-Guid. Diesen kann man allerdings aktivieren:
Set-MailboxDatabase MailboxDatabaseName -IndexEnabled:$false
Erste Datenbank löschen
Beim Installieren von Exchange Server 2010 wird automatisch eine Datenbank angelegt. Diese Läst sich nicht über die Gui löschen, auch wenn alle Postfächer verschoben sind. Darum muss man die
System-Postfächer verschieben:
Get-mailbox -Arbitration | New-MoveRequest -TargetDatabase "Berlin I - Postfach I"
Danach muss man noch die Verschiebungsanforderungen löschen und die Datenbank ist entfernbar.
Scripts
Alle Mitglieder einer Gruppe anzeigen und das bis zu 5 Ebenen.
Import-Module ActiveDirectory $DG = Read-Host function Get-MySubGroupMembersRecursive { $Mitglieder = Get-ADGroupMember $DG ForEach ($Mitglieder in $Mitglieder) { If ($Mitglieder.ObjectClass -eq "Group") { Get-MySubGroupMembersRecursive1 } If ($Mitglieder.ObjectClass -eq "User") { Write-Host ($Mitglieder.Name) } } } function Get-MySubGroupMembersRecursive1 { $Mitglieder2 = Get-ADGroupMember $Mitglieder.Name ForEach ($Mitglieder2 in $Mitglieder2) { If ($Mitglieder2.ObjectClass -eq "Group") { Get-MySubGroupMembersRecursive2 } If ($Mitglieder2.ObjectClass -eq "User") { Write-Host ($Mitglieder2.Name) } } } function Get-MySubGroupMembersRecursive2 { $Mitglieder3 = Get-ADGroupMember $Mitglieder2.Name ForEach ($Mitglieder3 in $Mitglieder3) { If ($Mitglieder3.ObjectClass -eq "Group") { Get-MySubGroupMembersRecursive3 } If ($Mitglieder3.ObjectClass -eq "User") { Write-Host ($Mitglieder3.Name) } } } function Get-MySubGroupMembersRecursive3 { $Mitglieder4 = Get-ADGroupMember $Mitglieder3.Name ForEach ($Mitglieder4 in $Mitglieder4) { If ($Mitglieder4.ObjectClass -eq "Group") { Get-MySubGroupMembersRecursive4 } If ($Mitglieder4.ObjectClass -eq "User") { Write-Host ($Mitglieder4.Name) } } } function Get-MySubGroupMembersRecursive4 { $Mitglieder5 = Get-ADGroupMember $Mitglieder4.Name ForEach ($Mitglieder5 in $Mitglieder5) { If ($Mitglieder5.ObjectClass -eq "Group") { Get-MySubGroupMembersRecursive5 } If ($Mitglieder5.ObjectClass -eq "User") { Write-Host ($Mitglieder5.Name) } } } function Get-MySubGroupMembersRecursive5 { $Mitglieder6 = Get-ADGroupMember $Mitglieder6.Name ForEach ($Mitglieder6 in $Mitglieder6) { If ($Mitglieder6.ObjectClass -eq "User") { Write-Host ($Mitglieder6.Name) } } } Get-MySubGroupMembersRecursive