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

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 🙂

PowerShell: Der watch-Befehl aus Linux

Unter Linux gibt es ja den watch-Befehl mit dem man einen Befehl alle x Sekunden wiederholen kann. Unter der Windows PowerShell gibts sowas leider standardmäßig nicht – aber man kann den Befehl mit Boardmitteln nachbauen:

while ($true) {Clear-Host; gci; sleep 15}

In diesem Beispiel wird zuerst mit Clear-Host die aktuelle Anezige der PowerShell gelöscht, dann gci ausgeführt und zum Schluss 15 Sekunden gewartet. Danach wiederholt sich das ganze bis man es mit STRG-C abbricht.

der Befehl lässt sich natürlich durch fast jeden anderen Befehl ersetzten 😉

Das ganze lässt sich gut für z.B. anzeigen von Verschiebeanforderungen bei Exchange benutzen:

while ($true) {Clear-Host; get-moverequest; sleep 15}

man kann auch Befehle kombinieren – z.B. das Datum anzeigen und etwas pingen

while ($true) {Clear-Host; date; ping 9.9.9.9; sleep 15}

Windows Server Deduplication – Chunk Ordner wird riesengroß

Wenn man auf einem Windows Server das Dedup-Feature einschaltet kann es passieren, dass der ChunkStore (dieser befindet sich in dem Ordner „System Volume Information“) in dem die Informationen für das Dedup gespeichert werden immer weiter wächst und so riesig wird das er teilweise den ganzen freien Platz auf dem Volume verbraucht.

Das kann man aber über einen DedupJob aber wieder fixen -hier am Beispiel eines Volumes F: :

eine Powershell als Administrator öffnen

und

Start-DedupJob -Volume “F:” -Type GarbageCollection -Memory 50

man kann mit

Get-DedupJob

überprüfen wie weit der Job schon ist.

Hilft dies nicht ist eine Möglichkeit noch die Deduplizierung rückgänging zu machen.

Dazu lässt man Dedup auf dem Volume aktiviert – deaktiviert aber die Hintergrundaktivität

Set-DedupSchedule BackgroundOptimization -enable $false

Start-DedupJob -Volume „F:“ -Type Unoptimization

Start-DedupJob -Volume “F:” -Type GarbageCollection

danach sollte der Chunk-Ordner weg sein – dann kann dedup bei Bedarf wieder aktiviert werden.

Windows-Prozessaktivierungsdienst startet nicht – Fehler 6801

Auf einem Windows-Server (in dem Fall ein 2008 R2) mit IIS starteten die IIS-Dienste nicht, da der Windows-Prozessaktivierungsdienst mit folgender Fehlermeldung nicht starten wollte:

„Windows konnte den Prozessaktivierungsdienst nicht sarten – Fehler 6801: Die Transaktionsunterstützung im angegebenen Ressourcen-Manager wurde nicht gestartet oder aufgrund eines Fehlers heruntergefahren“

bzw.:

„Windows could not start the Windows Process Activation Service – Error 6801: Transaction support within the specified resource manager is not started or was shut down due to an error“

Das Problem kann man folgend lösen:

eine Eingabeaufforderung (cmd) als Administrator startet und folgenden Befehl ausführen:

fsutil resource setautoreset true c:\

Danach muss man den Server neu starten – jetzt sollte der WAS (Windows-Prozessaktivierungsdienst) wieder starten – und somit auch die davon abhängigen IIS-Dienste 🙂

Quelle: forum.iis.net

Powershell: Programm oder Skript mit Credentials und „als Administrator“ ausführen

Manchmal muss man unter Windows ein Programm oder ein Skript mit speziellen Credentials ausführen und zusätzlich „als Administrator“ ausführen.

Das funktioniert über die Powershell einfach wie folgt:

$User = "Username"
$Password = "Password" | ConvertTo-SecureString -asPlainText -Force
$MyCredential = New-Object System.Management.Automation.PSCredential($User,$Password)

Start-Process -WindowStyle Hidden powershell.exe -Credential $MyCredential -ArgumentList '-noprofile -command &{Start c:\program\program.exe -Verb RunAs}'

Hier wird eine Powershell.exe mit den angegebenen Username und Passwort ausgeführt (Klartext-Passwörter sind natürlich schlecht – dienen hier nur als Beispiel!) und der Powershell.exe wird das Programm zum ausführen übergeben mit dem Attribut -Verb RunAs dass das Programm „als Administrator“ ausführt.

fertig 🙂

Windows 10 kann auf NetApp Cifs Freigaben nicht zugreifen

Ich hatte das Problem dass ein neuer Rechner mit Windows 10 nicht auf Cifs-Freigaben auf einem NetApp-Filer zugreifen konnte. Der alte Trick mit dem Ausschalten des „Sicheren Aushandeln“ – der Secure Negotiaten – funktionierte nicht mehr…

Lösung:

Auf der NetApp (per SSH) folgenden Befehl ausführen:

options cifs.smb2.signing.required on

Danach funktionierte der Zugriff reibungslos 🙂

Microsoft: KB3159398 macht Probleme bei der Gruppenrichtlinenverarbeitung

Das KB3159398, dass über Windows Update zur Zeit verteilt wird, ändert ein wenig die Art und Weise wie die Sicherheitsfilterung bei der Gruppenrichtlinienverarbeitung funktioniert.

Das kann zu Problemen führen, wie z.B.:

– Laufwerke werden nicht mehr gemappt
– Desktop-Symbole für Verknüpfungen werden nicht mehr sauber angezeigt
– Diverse Gruppenrichtlinien (z.B. Druckerzuweisungen, etc) funktionieren nicht mehr

Das Problem liegt an einem fehlendem Lese-Recht des Authentifizierte Benutzer (Authenticated Users) unter Delegierung, dass durch den Patch jetzt allerdings benötigt wird.

In dem KB dazu hat Microsoft das Problem auch beschrieben:

Known issues

MS16-072 changes the security context with which user group policies are retrieved. This by-design behavior change protects customers’ computers from a security vulnerability. Before MS16-072 is installed, user group policies were retrieved by using the user’s security context. After MS16-072 is installed, user group policies are retrieved by using the machines security context. This issue is applicable for the following KB articles:

3159398 MS16-072: Description of the security update for Group Policy: June 14, 2016
3163017 Cumulative update for Windows 10: June 14, 2016
3163018 Cumulative update for Windows 10 Version 1511 and Windows Server 2016 Technical Preview 4: June 14, 2016
3163016 Cumulative Update for Windows Server 2016 Technical Preview 5: June 14 2016

Symptoms

All user Group Policy, including those that have been security filtered on user accounts or security groups, or both, may fail to apply on domain joined computers.

Cause

This issue may occur if the Group Policy Object is missing the Read permissions for the Authenticated Users group or if you are using security filtering and are missing Read permissions for the domain computers group.

Resolution

To resolve this issue, use the Group Policy Management Console (GPMC.MSC) and follow one of the following steps:
– Add the Authenticated Users group with Read Permissions on the Group Policy Object (GPO).
– If you are using security filtering, add the Domain Computers group with read permission.

Lösung: Die Authentifizierten Benutzer manuell mit dem Lese-Recht bei den Delegierungen hinzufügen

AuthUsersGPO

Es gibt auch hier ein Script dass das automatisch macht.

Empfehlenswerter Artikel zu lesen: http://www.gruppenrichtlinien.de/artikel/sicherheitsfilterung-neu-erfunden-ms16-072-patchday-14062016/