Windows Batch: Uhrzeit und Datum verwenden (UPDATE: mit führender „0“ bei einstelligen Stunden)

Ich benötige im Alltag ab und an das aktuelle Datum und die Uhrzeit „zerlegt“ in einzelne Variablen, um zum Beispiel Dateien nach Zeit oder Datum abzuspeichern oder Logeinträge korrekt formatiert auszugeben. Das ist seit Windows XP zum Glück recht einfach, aber weil ich faul bin lege ich hier meine zu diesem Zweck erzeugten Substring-Scriptschnipsel ab – dann muss ich die paar Zeilen nicht immer neu tippen (und korrigieren).

Es gibt da auch ein Problem mit den führenden Nullen: Windows setzt die Zeitvariable %time% nicht mit führenden Nullen, sondern in „Menschlich lesbar“.

Beispiel:

C:\>echo %time%        Ergibt ab 10Uhr: 11:02:18,04

C:\>echo %time%        Ergibt ab 24Uhr: _9:02:18,04 Hier ist ein Leerzeichen eingefügt, denn das Padding des Strings ist immer gleich breit.

Lösung

set YYYY=%date:~-4%
set MM=%date:~-7,2%
set DD=%date:~-10,2%
set hr=%time:~0,2%
if "%hr:~0,1%" == " " SET hr=0%hr:~1,1%
set min=%time:~3,2%
set sek=%time:~6,2%

Mit diesen Variablen würde eine Ausgabezeile zum Beispiel so aussehen:

echo Es ist heute der %DD%.%MM%.%YYYY% und wir haben die wundervolle Uhrzeit %hr%:%min%:%sek%

Mit führenden Nullen sieht das Ergebnis dann, korrekterweise, so aus:

Es ist heute der 24.12.2016 und wir haben die wundervolle Uhrzeit 01:04:37

Nicht das diese Zeile viel Sinn hätte, in der Praxis benötige ich beispielsweise eher so etwas:

zip –m -9 idslogs-%YYY%%MM%%DD%%.zip %1*.log

… das mir Dateien mit einem sinnvollen Namen (z.B. idslogs-20121203.zip) erstellt.

Wichtig zu wissen: Diese Zeilen legen die wichtigen Werte direkt in eigenen Variablen ab; die Zuordnung ist im Moment der Zuordnung statisch, was bedeutet das ein Wert sobald zugewiesen immer so bleibt und sich nicht mit fortschreitender Zeit ändert. Wenn die Werte aktualisiert werden sollen (beispielsweise zu beginn/ende eines Script) muss dieser Block wieder aufgerufen werden, etwa mit einer call: Anweisung dorthin.

certutil 0x80090005 (-2146893819 NTE_BAD_DATA)

Wenn man unter Windows mit dem MMC Zertifikats-SnapIn einen frischen CSR erstellt („REQ“ im Windows-Jargon), wird standartmäßig der aktuelle „Microsoft Strong Crytographic Provider“ als Kryptoanbieter ausgewählt. Das ist im Prinzip auch gut so, denn das ist der aktuellste und vom Umfang her größte CSP (Certificate Storage Provider) den Windows mitbringt. Die meisten Windows-Features können damit auch problemlos umgehen – der IIS, der SMTP, RDS und so weiter.

Nicht jedoch Exchange (bis einschliesslich 2016 CU3). Exchange FBA unterstütz keine CNG Zertifikate. Nutzt man diese doch, kommt es zu dem berüchtigten Exchange OWA und Exchange EAC Anmeldeloop.

Folgt man dem im Blog angegebenen Anweisungen zum austausch der Zertifikates und erstellt ein neues passendes Zertifikat, kommt es beim Import der neuen Zertifikate (ob CER oder PFX spielt keine Rolle) oftmal zu dem Fehler

certutil 0x80090005 (-2146893819 NTE_BAD_DATA)

Ursache hierfür ist, das der im CSR angegebene CSP nicht korrekt ist. Wenn man den CSR unter Windows erstellt, versteckt sich das zugehörige Häkchen unter Neue Anforderung erstellen > Eigenschaften > Privater Schlüssel > Kryptografiedienstanbieter. Der für den CSR ausgewählte CSP lässt sich mit certutil an der Kommandozeile selbstverständlich nicht nachschauen …

Windows PKI Fehler „Der angeforderte Antragstellername ist ungültig oder zu lang (0x80094001)“

Problem

Beim ausstellen eines neuen Zertifikates mit einem frisch generierten CSR reagiert die Windows Zertifizierungsstelle (CA) in dem Webinterface mit diesem Fehler:

Der angeforderte Antragstellername ist ungültig oder zu lang (0x80094001)

Das gleiche tut Sie auch auf einem englischen Windows, mit einem englischen Fehler:

Error parsing request the subject name is invalid or too long 0x80094001 (CSR)

Lösung

Wenn die CA unter Windows Server 2008 oder früher erstellt wurde, hat diese warscheinlich das gute alte 64-Zeichen Limit für Domains geerbt. Man kann diese (heute) sinnlose limitierung ganz schnell abschalten:

c:\> certutil -setreg ca\EnforceX500NameLengths 0

Die Einstellung ist ebenfalls notwendig, wenn man Wildcard-Zertifikate mit einer Windows CA unterschreiben möchte.

Windows Defender (MsMpEng.exe) deaktivieren (Windows 10 und Windows Server)

Problem

Wärend eines Setups oder einer größeren Aktion auf einer Windows-Maschine kostet der Windows-Defender „MsMpEng.exe“ (der Diensthost des Windows-Defenders) unnötig viel Leistung und Zeit.Trotz der allgemein recht guten Performance des Virenwächters von Microsoft, lässt sich vor allem beim Zugriff auf große Dateimengen einiges an Zeit sparen wenn der Wächter temporär ausgeschaltet wird.

Lösung

In der Regel reicht es schon, an der PowerShell die Realtime-Engine für die Echtzeitüberwachung aus zu schalten. Dann sinkt die Last des Prozesses auf praktisch Null und man kann sofort eine deutlich bessere Performance beim Dateizugriff beobachten. Die Einstellungen werden sofort aktiv und brauchen keinen Neustart.

Windows Defender Echtzeitüberwachung deaktivieren

PS C:\> Set-MpPreference -DisableRealtimeMonitoring $true

Windows Defender Echtzeitüberwachung aktivieren

PS C:\> Set-MpPreference -DisableRealtimeMonitoring $false

Windows Defender Echtzeitüberwachung-Einstellung prüfen

PS C:\> Get-MpPreference | FL *RealtimeMonitoring

Windows-Defender vollständig deinstallieren

PS C:\> Remove-WindowsFeature Windows-Defender, Windows-Defender-GUI

Exchnage 2007/2010/2013/2016: „Vorangegangener Installationsfehler beim Ausführen der Aktion Install/Uninstall“

Problem

Das Exchange 2016 Setup hakt an so manchen stellen. Ganz besonders häufig treten Fehler bei der Deinstalation einer Rolle auf, oder bei einem CU-Update. Fehler wie dieser:

Vorangegangener Installationsfehler beim Ausführen der Aktion „Install“ [oder auch "uninstall", je nachdem]. Die Installation kann nicht fortgesetzt werden.

Lösung

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\v15

  1. In  allen Schlüssel hierunter nach der Zeichenfolge „Action“ suchen, welcher den Wert „Install“ (oder Uninstall, je nachdem) beinhaltet.
  2. Den ganzen Eintrag löschen

Danach läuft das Setup wieder. Zwar im Recovery-Modus, aber normalerweise damit auch erfolgreich.

Windows Server 2008/2008R2/2012/2012R2/2016 NTP-Server via W32Time konfigurieren

Der Windows Zeitdienst (W32Time) kann so einiges. Natürlich sind die sinnvollen und zentral wichtigen Konfigurationsoptionen dazu nicht in einem hübschen Aufgabenorientierten GUI zusammengefasst, sondern gut an der Kommandozeile versteckt.

Prinzipiell ist der PDC-Emulator immer die erste und fundamentalste Zeitquelle. An dem PDC-Emulator jeder Domain synchronisieren sich die Domänenmitglieder. Damit das klappt, muss dieser „autorisierend“ sein und konsequenterweise auch eine korrekt gehende Uhr haben. Bei einem Zeitunterschied von mehr als fünf Minuten war es das sonst mit der (Kerbereos-) Windows-Anmeldung.

PDC-Emulator finden (auf einem DC ausführen)

ntdsutil roles connections "connect to server SERENITY" q "select operation target" "list roles for connected server" q q q |find/I "PDC"

Windows 2008/2008R2/2012 Zeitserver konfigurieren (jetzt auf dem PDC-Emulator ausführen)

net stop w32time
w32tm /config /syncfromflags:manual /manualpeerlist:"0.de.pool.ntp.org,0x1 pool.ntp.org,0x1"
w32tm /config /reliable:yes net start w32time

Mehrere Peers werden in der Liste Leerzeichengetrennt, die Peerliste wird von Anführungszeichen umfasst. Der Server muss logischerweise dafür auch NTP(UDP) mit dem Internet sprechen dürfen, sonst hagelt es W32TM-Fehler im Ereignisprotokoll. Die Synchronisation kann man schnell testen mit:

w32tm /query /status

Und nochmal die Synchronisation vom NTP anstossen:

w32tm /resync

Microsoft Edge Startseite mit Gruppenrichlinien (GPO) festlegen

Seit der Windows 10 Version 1511+ lässt sich ENDLICH die Startseite des neuen (und recht flottem) Browsers Edge über eine Gruppenrichtlinie vorgeben. Das hat eine Weile gedauert, viele Admins waren verblüfft über die offizielle „geht nicht“ Ansage kurz vorher.

Die nagelneuen passenden ADMX-Templates für Windows 10 (mit Edge) gibt es hier zum herunterladen: https://www.microsoft.com/de-DE/download/details.aspx?id=53430

Unsere Empfehlung ist an dieser Stelle, die neuen ADMX-Files auch direkt im AD Central-Store abzulegen.

Danach findet man die neue Einstellung in der Gruppenrichtlinienverwaltung unter:

Benutzerkonfiguration > Richtlinien > Administrative Vorlagen > Windows-Komponenten > Microsoft Edge

 

In RDP-Sitzungen (Remotedesktopverbindung) funktioniert auf einmal „kopieren“ und „einfügen“ nicht mehr

In einigen RDP-Sessions funktionieren plötzlich „kopieren und einfügen“ nicht mehr. Gestern ging’s noch, heute nicht mehr. In einer Sitzung kopieren, in eine andere einfügen geht nimmer. Auch Sitzung abmelden und anmelden bringt keine Besserung, copy+paste ist kaputt. Es ist davon auszugehen, das die Einstellung im Client richtig ist, also die Zwischenablage eingeschaltet ist (Lokale Ressourcen > Zwischenablage angehakt).

Der Fix ist einfach: Auf beiden Seiten (sowohl Sever als auch Client) den Prozess „rdpclip.exe“ beenden und neu starten. Dann gehts wieder. Dieser Bug ist erst knappe 8 Jahre bekannt, von einem Patch gehen wir also in nächster Zeit nicht aus. RDPCLIP beendet seine Abeit, wenn in einem Zwischenablage-Vorgang die Verbindung beendet wird. Passiert gerne mal wenn man eine größere Datei oder Textmenge kopiert und ein WLAN abreißt.

Lösung:

c:\> taskkill /IM "rdpclip.exe" /f && %SystemRoot%\System32\rdpclip.exe

(Auf Server UND Client ausführen)