Exchange Server: Getrennte Postfächer anzeigen

Wenn auf einem Exchange ein Postfach deaktiviert oder gelöscht wird, werden diese nicht gleich als getrennte Postfächer angezeigt.
Entweder man wartet auf den internen Wartungsplan oder man startet die Erkennung der getrennten Mailboxen selber – ganz einfach mittels Shell 🙂

Unter Exchange 2007 und 2010:

Für alle Datenbanken:
Get-MailboxDatabase | Clean-MailboxDatabase

Für eine spezifische Datenbank:
Clean-MailboxDatabase Datenbankname

Unter Exchange 2013, 2016 und 2019

Für alle Datenbanken:
Get-MailboxDatabase | Get-MailboxStatistics | Where {$_.DisconnectReason -ne $null } | ForEach { Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$False}

Für eine spezifische Datenbank
Get-MailboxStatistics -Database Datenbankname | ForEach {Update-StoreMailboxState -Database $_.Database -Identity $_.MailboxGuid -Confirm:$False}

Jetzt muss man je nach Datenbankgröße in bisschen warten bis der Vorgang erledigt ist…

Dann kann man mit

get-mailboxdatabase | get-mailboxstatistics | Where{ $_.DisconnectDate -ne $null } |fl displayName,Identity,disconnectdate,database

sich alle getrennten und gelöschten Postfächer anzeigen lassen 🙂

Quelle: docs.microsoft.com und docs.microsoft.com

Active Directory: FSMO-Rollen per Powershell übertragen

Um die fünf FSMO-Rollen in einer Domäne von einem auf einen anderen Domain Controller zu verschieben hab ich früher immer das ntdsutil verwendet – aber das geht natürlich auch mit der Powershell 🙂

Zuerst zeigen wir uns am besten alle Rolleninhaber an. Dazu die AD-Powershell am Domain Controller öffnen oder die Module mit

Import-Module ActiveDirectory

importieren.

Die Rollen des Forest:

Get-ADForest domain.local | ft DomainNamingMaster, SchemaMaster

Und die Rollen der Domäne

Get-ADDomain domain.local | ft InfrastructureMaster, PDCEmulator, RIDMaster

Um eine Rolle zu verschieben muss man jetzt nur das Move-ADDirectoryServerOperationMasterRole Module im folgenden Schema verwenden:

Move-ADDirectoryServerOperationMasterRole -Identity „Ziel-DC“ Role

Also z. B. :

Move-ADDirectoryServerOperationMasterRole -Identity „dc-02“ PDCEmulator

Tipp: Man kann die Rollen auch super mit 0 – 4 abkürzen:

0 : PDCEmulator
1 : RIDMaster
2 : InfrastructureMaster
3 : SchemaMaster
4 : DomainNamingMaster

So kann man nämlich den Befehl schön verkürzen 🙂

Es reicht so z.B. ein

Move-ADDirectoryServerOperationMasterRole -Identity „dc-02“ –OperationMasterRole 0,1

Wenn mann z.B. alle Rollen auf einmal verschieben will lohnt sich das abkürzen richtig – so reicht ein

Move-ADDirectoryServerOperationMasterRole -Identity „dc-02“ –OperationMasterRole 0,1,2,3,4

statt

Move-ADDirectoryServerOperationMasterRole -Identity „dc-02“ –OperationMasterRole PDCEmulator, RIDMaster, InfrastructureMaster, SchemaMaster, DomainNamingMaster

Danach nochmal überprüfen:

Get-ADForest domain.local | ft DomainNamingMaster, SchemaMaster

und

Get-ADDomain domain.local | ft InfrastructureMaster, PDCEmulator, RIDMaster

Falls eine der Rollen nicht verschoben werden kann – weil z.B. der alte Inhaber der Rolle nicht mehr erreichbar ist – kann mit dem Parameter -force die Übertragung erzwungen werden (wie unter ntdsutil mit seize).

Move-ADDirectoryServerOperationMasterRole -Identity “dc-02” –OperationMasterRole, DomainNamingMaster,PDCEmulator,RIDMaster,SchemaMaster,InfrastructureMaster –Force

Selbstverständlich sollte der alte Domain Controller von dem wir die Rollen mit -Force verschoben haben nie wieder angeschaltet werden!

Active Directory: Zeitsynchronisation für die Domain konfigurieren

Die Zeit ist in einem Active Directory extrem wichtig – so kann man sich z.B. (bei Default-Einstellungen) mit einer Zeitdifferenz mehr als 5 Minuten zwischen Domain Controller und Client nicht authentifizieren und deshalb nicht einloggen.

Der Windows Zeitdienst (W32Time) ist dafür zuständig das überall in der Domäne die gleiche Zeit ist. Alle Clients syncen mit „ihrem“ Domain Controller und die Domain Controller syncen mit dem DC der die PDC-Rolle inne hat.

Damit überall die gleiche – und am besten auch noch die richtige 😉 – Zeit ist konfiguriert man an dem DC mit der PDC-Rolle den Windows Zeitdienst folgendermaßen per Powershell:

w32tm /config /manualpeerlist:timeserver /syncfromflags:manual /reliable:yes /update

also z.B. :

w32tm /config /manualpeerlist:0.de.pool.ntp.org /syncfromflags:manual /reliable:yes /update

oder mit mehreren NTP-Servern:

w32tm /config /syncfromflags:manual /manualpeerlist:“0.de.pool.ntp.org 1.de.pool.ntp.org“ /reliable:yes /update

Danach den Windows Zeitdienst durchstarten

Restart-Service W32Time

und noch einmal syncen lassen

w32tm /resync

Mit

w32tm /query /status

kann überprüft werden ob der Sync funktioniert – fertig 🙂

Alle anderen DCs und/oder Clients der Domäne sollten sich jetzt mit dem PDC synchronisieren.

Ebenfalls mit

w32tm /query /status

kann überprüft werden ob das auch klappt.

Nach ein paar Minuten sollte auf allen Domain-Membern die gleiche Zeit sein 🙂

Quelle: blogs.technet.microsoft.com

PAC-Dateien mit IIS veröffentlichen

Ich konfiguriere in letzter Zeit öfters den Proxy der Clients mit einer PAC-Datei – und wollte hier mal eine kurze Anleitung erstellen 🙂

Ich erstelle meistens auf einem IIS – z.B. auf dem das Intranet läuft – eine eigene Webseite von der die PAC-Datei geladen wird – die bei mir meistens auf http://pac/proxy.pac hört – und verteile den Proxy-Eintrag dann per Gruppenrichtlinie.

So sieht das dann am Schluss beim Client aus:

1) PAC-Datei erstellen

Zuerst erstellen wir eine proxy.pac – hier eine als Beispiel der alles bis auf Webseiten aus dem eigenen Netz zu einem Proxy geschickt wird:

 
function FindProxyForURL(url, host) {
                
      if (isInNet(host, "10.10.10.0", "255.255.255.0")) {return "DIRECT";}
        	     
      return "PROXY 10.10.12.4:8080";
}

Hier gibts noch ein paar Infos für die Konfig einer PAC-Datei: https://findproxyforurl.com/example-pac-file/

2) IIS Einstellungen

Wir erstellen auf dem Server auf dem der IIS läuft den Ordner C:\inetpub\pac und kopieren die erstellte proxy.pac dort rein

Jetzt öffnen wir den Internetinformationsdienste (IIS)-Manager und erstellen eine neue Website:

Die folgende Konfiguration wäre für den Aufruf von http://pac/proxy.pac – will man mit einem FQDN arbeiten (z.B. http://pac.test.local/proxy.pac) muss man den Eintrag unter Hostname entsprechend anpassen:

Jetzt muss noch der MIME-Type für die PAC-Datei erstellt werden:

Jetzt auf Hinzufügen gehen:

Hier die Dateierweiterung .pac und den MIME-Typ application/x-ns-proxy-autoconfig angeben

3) DNS-Eintrag

Jetzt muss noch ein DNS-Eintrag erstellt werden der auf unseren IIS-Server zeigt – entweder einen Host- oder einen CNAME-Eintrag:

Jetzt sollte wenn man die URL http://pac/proxy.pac im Browser eingibt die Datei als Download angeboten werden:

4) Gruppenrichtlinie

Man muss jetzt eigentlich nur noch eine Richtlinie erstellen in der unter „Script für automatischer Konfiguration verwenden“ unser Script angegeben und „Einstellungen automatisch erkennen“ deaktiviert wird.

Falls noch der Internet Explorer verwendet wird muss noch unter Richtlinien – Administrative Vorlagen – Windows-Komponenten/Internet Explo-rer/Kompatibilitätsansicht die Kompatibilität für Intranet Seiten deaktiviert werden:

Jetzt nur noch auf die User anwenden und schon sind wir fertig 🙂

Quelle: marckean.com

Sophos XG: ActiveSync veröffentlichen

Da bei uns immer mehr die Sophos XG verwendet wird gibt jetzt hier eine kleine Anleitung wie man ActiveSync veröffentlicht 🙂

1) Zertifikat installieren

Zuerst müssen wir das Zertifikat für die externe Domäne (hier als Beispiel test.friedlandreas.net) installieren. Man kann das Zertifikat in verschieden Formaten importieren – am einfachsten gehts es meiner Meinung nach per PFX:

Dann sollte es hier auftauchen

2) Webserver erstellen

Jetzt muss der Exchange-Server als WebServer angelegt werden.

Zuerst legen wir einen Host an

Danach können wir den WebServer anlegen

Unter Host wird unser neu angelegter Exchange-Host angebenden und der Typ auf HTTPS umgestellt und das Zertifikat angegeben.

In der Übersicht sollte es dann so aussehen:

3) Firewall-Regel erstellen

Jetzt kann die eigentlich Veröffentlichung konfiguriert werden.

Wir wählen hier das als Anwendugnsvorlage Exchange General und stellen den WAN-Port (bei mir hier der Port2) und das Zertifikat ein

Weiter unten unter „Geschützer Server“ entfernen wir jetzt alle nicht benötigten Einträge und lassen nur Microsoft-Server-ActiveSync stehen und editieren den Eintrag

Wir fügen hier unseren Exchange hinzu und entfernen die Authentifizierung


Unter Ausnahmen entfernen wir alles unnötige und editieren den Eintrag

Hier entfernen wir auch alles unnötige und passen die Pfade auf /Microsoft-Server-ActiveSync?* und /Microsoft-Server-ActiveSync/* an


Danach sollte es so aussehen

Unter „Erweitert“ sollte es so aussehen und dann können wir auch schon speichern 🙂

Jetzt sieht es in der Firewall so aus:

Jetzt sind wir fertig und es sollte alles funktionieren 🙂

Kurze Anmerkung zum Microsoft Remove Connecitvity Analycer : In der Standardeinstellung des Sophos XG klappt der Test nicht – er wirft einen Fehler das er sich nicht verbinden kann.

Das liegt daran das die Sophos standardmäßig ihre WebServer nur mit TLS 1.1 oder höher veröffentlicht – der Connectivity Analycer aber nur mit TLS 1.0 funktioniert.

Dies kann unter General Setting unter WebServer konfiguriert werden:

Ich lasse aber TLS 1.1 eingestellt – mit Clients hatte ich nie Probleme. Ich stelle zum testen der Verbindung kurz um – und wenn der Analyzer glücklich ist und mir ein grünes Häkchen bringt stelle ich wieder um 🙂

Exchange: Mailboxen in PST exportieren

Manchmal will man entweder eine einzelne Mailbox oder alle Mailboxen auf einem Exchange in eine PST-Datei exportieren – das geht natürlich wunderbar einfach über die Powershell 😉

Zuerst muss man dem User mit dem man die PSTs exportieren will – z.B. dem Administrator – überhaupt das Recht zum Exportieren geben:

New-ManagementRoleAssignment -Role "Mailbox Import Export" -User Administrator

Danach bitte die Powershell-Konsole schließen und eine neue aufmachen.

Einzelne Mailbox exportieren

Eine einzelne Mailbox kann mit

New-MailboxExportRequest -Mailbox user -FilePath \\server\freigabe\user.pst

exportiert werden – hier mit dem Beispiel Administrator

New-MailboxExportRequest -Mailbox Administrator -FilePath \\localhost\c$\pst\administrator.pst

Alle Mailboxen exportieren

Will man alle Mailboxen exportieren geht das mit

get-mailbox | foreach {New-MailboxExportRequest -Mailbox $_.Alias -FilePath "\\server\freigabe\$_.pst"}

Hier mein Beispiel:

get-mailbox | foreach {New-MailboxExportRequest -Mailbox $_.Alias -FilePath "\\localhost\c$\pst\$_.pst"}

Das Ergebnis sieht dann so aus:

Status anzeigen

Die Fortschritte bzw. den Status des Exports kann man sich mit

Get-MailboxExportRequest

anzeigen lassen.

Aufräumen

Um alle Export-Request am Exchange am Ende wieder zu löschen kann man das mit

Get-MailboxExportRequest | Remove-MailboxExportRequest

die PST-Dateien bleiben natürlich 😉

Quelle: www.itnator.net

Exchange: Mailbox erstellen für alle User einer Organisationseinheit

Wenn man mal für alle User einer Organisationseinheit eine Exchange-Mailbox erstellen will geht das super einfach per Powershell:

Get-User -OrganizationalUnit „OU=Finanzverwaltung,OU=Abteilungen,DC=test,DC=local“ | Enable-Mailbox

Kurze Erklärung: Mit Get-User zeigen wir uns alle Benutzer in der angegebenen OU an (muss im LDAP-Pfad-Format bzw. als DistinguishedName angegeben sein) und dann pipen wir es in ein Enable-Mailbox wo eben die Mailbox erstellt wird. fertig 🙂

Exchange: Move-Request für alle Maiboxen einer Organisationseinheit

Bei Exchange-Migrationen verschiebe ich die Mailboxen der User eigentlich immer per Exchange Powershell mit dem Move-Request-Befehl.

Bei größeren Umgebungen verschiebe ich die Mailboxen gerne per Organisationseinheiten (OU). Im Active Directory sind die Benutzer eh hoffentlich schon in sinnvollen OUs strukturiert – Finanzabteilung, IT, etc. – und so kann ich hier einfach auf diese Struktur zurückgreifen.

Das geht ganz einfach über die Exchange Powershell:

Get-Mailbox -OrganizationalUnit "OU=Finanzabteilung,OU=Users,DC=Domain,DC=local" | New-MoveRequest -TargetDatabase "ExchangeDB01"

Kurze Erklärung: Mit Get-Mailbox zeigen wir uns alle Mailboxen in der angegebenen OU an (muss im LDAP-Pfad-Format bzw. als DistinguishedName angegeben sein) und dann pipen wir es in ein New-MoveRequest mit angegebener Datenbank.

Fertig 🙂

Übrigens: Den LDAP-Pfad bzw. den DistinguishedName bekommt man am einfachsten über das Active Directory-Benutzer und Computer-MMC:

Unter Ansicht die erweiterten Features aktivieren

In den Eigenschaften der OU auf Attribut-Editor gehen und dort den Wert distinguishedName mittels Ansicht anzeigen lassen – von dort kann man ihn einfach kopieren

IIS: X-Forwarded-For Header im Log

Wenn man einen Microsoft Internet Information Services (IIS) hinter einem Reverse Proxy oder einem Load Balancer betreibt, sieht man in den Logs des IIS nur immer die IP-Adresse der Reverse Proxys bzw. dem Load Balancers und nicht die eigentliche IP des Clients.

Wenn der Reverse Proxy bzw. Load Balancer richtig konfiguriert wurde – z.B. bei Nginx wäre es

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

dann wird die IP des Clients an den IIS jedoch sauber übergeben.

Um diese jetzt in den Logs zu sehen muss jetzt nur noch der X-Forwarded-For-Header aktiviert werden.

Den IIS Manager starten und den Punkt Protokollierung öffnen

Dort bei Format auf Felder auswählen…

Dort auf Feld hinzufügen

Dort folgende Werte eintragen:

Feldname: x-forwarded-for
Quelltyp: Anforderungsheader
Quelle: X-Forwarded-For

und mit OK bestätigen.

nochmal mit OK bestätigen und auf Übernehmen klicken

Jetzt taucht im Log-Verzeichnis eine Log-Datei mit eine vorangestellten x_ auf – dort wird jetzt reingeloggt – mit dem X-Forwarded-For-Header und so auch mit der originalen Client-IP.

Quelle: www.loadbalancer.org

Exchange 2013 und 2016: Mails bleiben in Entwürfe hängen

Es gibt manchmal mal das Problem unter Exchange Server 2013 und 2016 dass Emails nicht versendet werden und in Entwürfe (Drafts) bzw. manchmal auch in Postausgang hängen bleiben.

Das Problem tritt sowohl in Outlook als auch in der Outlook Web App (OWA) auf.

Der Grund war bei mir bisher immer eine fehlerhafte DNS-Konfiguration des Exchanges!

Vor allem bei mehreren Netzwerkkarten oder bei mehreren DNS-Servern kann hier die Automatik versagen.

Einzustellen ist das am einfachsten in der ECP:

Hier stehen die DNS-Lookups (intern und extern) standardmäßig auf „Alle Netzwerkkarten“:

Hier kann die richtige Netzwerkkarte ausgewählt werden – oder auch ein DNS-Server manuell eingetragen werden:

Danach sollte das Problem gelöst sein 🙂

Quelle: thoughtsofanidlemind.com