PowerShell Befehle für den Exchange Server

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.

Quelle [2017-03-07]: http://chilltimes.de/2013/02/08/powershell-nutzliche-exchange-server-2010-befehle/

Anzeige aller E-Mail Adressen in Exchange 2013/2016 mit Exchange-Verwaltungsshell

Exchange-Verwaltungsshell Konsole starten und rein mit den Schnipseln

E-Mail Adressen aller Mailbox Datenbanken auslesen:
Get-MailboxDatabase | Get-Mailbox | fl DisplayName, EmailAddresses > c:\temp\Mailbox.ctxt

E-Mail Adressen von Verteilergruppen auslesen:
Get-DistributionGroup | fl DisplayName, EmailAddresses > c:\temp\Verteilergruppen.txt

E-Mail Adressen aus einer öffentlichen Ordner Datenbank auslesen:
Get-MailPublicFolder | fl Displayname, EmailAddresses > c:\temp\PublicFolder.txt

hier die Quelle: http://www.wsuspraxis.de/anzeige-aller-e-mail-adressen-in-exchange-2013/

Exchange Online mit Powershell administrieren

mache Dinge lassen sich mit der Powershell schneller und einfache handhaben, auch den Exchange Online

Vorabinformation zur Powershell

falls du keine Powershell auf deinem Rechner hast, kannst du die folgende Anleitung benutzen, ansonsten über springe diesen Teil

  1. Deinstalliere falls vorhanden deine alte Powershell Umgebung
  2. Installiere das Windows Management Framework

Detail kannst du auch hier lesen:  Install and ConfigureWindowsPowerShell

Verbindung zum Exchange Online über Powershell

  1. Powershell als Administrator starten (rechte Maustaste benutzen :))
  2. folgender Befehl, fühlt die Variable $LiveCred mit einem Office365 Admin:
$LiveCred = Get-Credential
  1. es öffnet sich ein Fenster wo du deine Account Daten für Office365 bestätigst (sollte ein Account mit Admin Rechten sein)
  2. danach folgende Kommandos in der PS ausführen:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection
Import-PSSession $Session
  1. jetzt seid Ihr erfolgreich verbunden

detaillierte Informationen zum Thema findet Ihr hier:  Connect WindowsPowerShell to the Service

Jetzt ein Bespiel, um den Parameter OWAEnable zu prüfen sowie anzupassen

  1. mit folgenden cmlet prüft Ihr den Parameter  OWAEnabled für eine E-Mail Adresse. Falls OWAEnabled eingeschaltet ist, bekommt Ihr ein „true“ als Rückgabewert
Get-CASMailbox -Identity user@sample.com | FL *owa*
  1. um den OWAEnabled Parameter für eine E-Mail Adresse anzupassen, benutzt Ihr das cmlet wie folgt
Set-CASMailbox -Identity user@sample.com -OWAEnabled:$true

Mehr Informationen zum Thema findet Ihr unter folgendem Link:  Exchange-Verwaltungsshell

über WinRM die Firewall mit Powershell remote deaktivieren

wozu brauch man das „WinRM die Firewall per Powershell remote steuern“

folgende Situation:

versehentlich wurde aus der Ferne auf einer Microsoft Server 2012 R2 Core Installation die Firewall aktiviert und der Zugriff über Remote-Desktop war nicht mehr möglich.

Was habe ich gemacht, um das Rückgängig zumachen.

Ich konnte mich glücklicherweise auf einer anderen Maschine in diesem Netzwerk per Remote-Desktop verbinden und habe mit Windows Remote Management WinRM die Firewall wieder deaktiviert.

Hier die Stepps

1. Powershell als Administrator starten
2. Windows Remote Management sollte eingerichtet sein

check ob WinRM richtig eingerichtet wurde

 PS C:\Windows\system32> Test-WSMan NameDesServers 

sollte dann erscheinen wenn WinRM richtig eingerichtet wurde

wsmid : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsddas ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor : Microsoft Corporation
ProductVersion : OS: 0.0.0 SP: 0.0 Stack: 3.0

3. falls nötig „TrustedHost“ Settings für WinRM setzen

Bei Rechnern, die nicht einer Domäne angehören, muss der Remote-PC auf dem Client als TrustedHost eingetragen.

 PS C:\Windows\system32> Set-Item wsman:\localhost\client\trustedhosts * 

„trustedhost *“ erlaubt den Zugriff auf alle Hostsysteme, egal in welcher Domäne oder Workgroup erlaubt er ist

4. mit diesem Command wird die Verbindung aufgebaut

 PS C:\Windows\system32> Enter-PSSession -ComputerName NameDesServers -Credential administrator 

5. und nun die Firewall wieder deaktivieren

 [hyp01]: PS C:\Users\Administrator\Documents> netsh advfirewall set currentprofile state on 

die Firewall wieder aktivieren, geht so

 [hyp01]: PS C:\Users\Administrator\Documents> netsh advfirewall set currentprofile state off 

den Status der Firewall überprüfen,geht so

 [hyp01]: PS C:\Users\Administrator\Documents> netsh advfirewall show currentprofile 

Hier noch ein Link zu WinRM auf Microsoft Developer Network: https://msdn.microsoft.com/de-de/library/aa384426(v=vs.85).aspx

Hier das alles mal in einem Video-Beitrag zusammengefasst:

Viel Spaß und alle Angaben wie immer ohne Gewähr

Exchange Server Version ermitteln und vergleichen

Bei der Fehlerbehebung eines Exchange Server ist es besser zu wissen mit wem man es zu tun hat, um eine gewisse Aussage oder/und Entscheidungen zu treffen.

Die Exchange Server Version mit Powershell ermitteln geht so:

Exchange Powershell Console öffnen und folgende Zeile ausführen

Get-ExchangeServer | ft name,AdminDisplayVersion -HideTableHeaders -AutoSize

Eine Übersicht der Exchange Server build numbers findet Ihr z.B. unter : https://buildnumbers.wordpress.com/exchange/