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.

VMWare ESXi: „Es wurde kein Ziel für Coredumps konfiguriert. Derzeit können keine Coredumps für den Host gespeichert werden.“

Es wurde kein Ziel für Coredumps konfiguriert. Derzeit können keine coredumps für den Host gespeichert werden

Es gibt zwei Möglichkeiten, die Meldung „Es wurde kein Ziel für Coredumps konfiguriert. Derzeit können keine coredumps für den Host gespeichert werden“ los zu werden. Es gibt den „sauberen“ Weg, der ein neues Ziel für die Kerneldumps angibt, den schnellen und einfachen Weg Coredumps ganz abzuschalten und die schnelle „Hackery“ Die Warnung (pro Host) zu entfernen.

Möglichkeit 1 (korrekt): Neues Ziel für coredumps konfigurieren

1) Per SSH am Server anmelden und die coredump Konfiguration anschauen:

~ # esxcfg-dumppart -l
Configured Dump Partition Not Found, Skipping

3) Freie Partitionen für Coredumps anschauen:

~ # esxcfg-dumppart -f

4) Die passende Partition zur coredump config hinzufügen:

~ # esxcfg-dumppart -s name

Zum Beispiel: esxcfg-dumppart -s naa.444408f4444000071c57384957867ee:7

Danach steht in der Ausgabe von esxcfg-dumppart -l in der Spalte „Is Active“ bei der entsprechenden Partiton ein „Yes“ und die Meldung im vSphere Client ist verschwunden.

Möglichkeit 2 (naja): Coredumps abschalten

Die coredump.Funktion des Kernels lässt sich auch komplett deaktivieren. Das geht unter Konfiguration -> Erweiterte Einstellungen -> VMKernel. Danach ist ein Host-Reboot notwendig.

es-wurde-kein-ziel-fuer-coredumps-konfiguriert-abschalten

Möglichkeit 3 (Hackery): Coredump-Warnung abschalten

Diese Eintellung ist pro Host möglich und verhindert die gelbe Warnmeldung. Die Einträge im Logfile bleiben vorhanden.

Host > Konfiguration > Erweiterte Einstellungen > UserVars > UserVars.SuppressCoredumpWarning auf 1 stellen

kein-coredump-ziel-konfiguriert-warnung-ausschalten

vmWare Gast VM ohne vCenter von einem Host auf einen anderen verschieben

Problem

Auf QUELLHOST ist eine VM die auf ZIELHOST verschoben werden soll. Es gibt kein Shared Storage, kein vCenter und keine sonstigen Werkzeuge.

Lösung

Es gibt zwei ganz gute Möglichkeiten eine VM von ESX-zu-ESX zu kopieren. Einmal das ovftool (schnell) und scp (im Lieferumfang). Ersteres berücksichtigt die VM(X) selbst, also auch die Einstellungen wie verbundene Netzwerke und VMDKs die in anderen Ordnern liegen. SCP dagegen kann „nur“ stumpf Dateien kopieren, ist dafür aber in jedem SSH-Paket (auf jedem ESX/i) enthalten.

Virtuelle Maschine mit OVFTool kopieren

  1. Das vmware „OVF Tool“ herunterladen und auf einem Rechenr (Windows/Linux/Mac …) installieren: https://www.vmware.com/support/developer/ovf/
  2. Syntax:
    ovftool -ds="ZIELDATASTORENAME" "vi://root@QUELLHOST/VMNAME" "vi://root@ZIELHOST"

Es gibt einige mögliche Fehler die hierbei öfters auftreten:

Error: No network mapping specified OVF networks

Die Quellmaschine ist mit einem virtuellen Netzwerk verbunden, das der Zielhost nicht kennt. Entweder das Quellnetz umbenennen, NIC entfernen oder das Zielnetz anpassen. Es gibt auch die Möglichkeit das Ziel an der Kommandozeile anzupassen, aber da wir das in diesem Fall nicht brauchten, müsst ihr selber in die Dokumentation schauen 🙂

The operation is not supported on the object. Completed with errors

vmware-maschine-ohne-vcenter-kopierenAuf Quelle und Ziel müssen die SSH/HTTP/HTTPS-Dienste sowohl gestartet als auch in der Firewall freigegeben sein. In diesem Fall war es der SSH-Client, bzw. dessen ausgehende Verbindung. Alle ESX-Server haben auch ausgehende (!) firewall aktiv. Zudem muss die zu kopierende Maschine ausgeschaltet sein.

Virtuelle Maschine mit SCP kopieren

  1. Auf der Quellmaschine ausgehende SSH-Verbindungen („SSH-Client“) in der Firewall erlauben und dne SSH-Server starten.
  2. Auf dem Zielserver SSH-Server starten und eingehende Verbindungen erlauben (standart)
  3. SCP Syntax auf dem Quellhost:
     # scp -r /vmfs/volumes/QUELLDATASTORE/QUELLMASCHINE root@ZIELHOST:/vmfs/volumes/ZIELDATASTORENAME

Die Übertragung ist verschlüsselt, sicher und sehr zerlässig. Leider nicht wahnsinnig schnell. Auf einem aktuellen Host habe ich soeben einige Maschinen mit 30-40Mb/S umgezogen. Innerhalb des Clusters, über das vCenter, lief die Kopie mit rund 160Mb/s. Wenn das durchgelaufen ist, gibt es die Maschine zweimal (SCP heisst „Secure copy“, nicht move), also die Quelle danach natürlich löschen.

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)

Veeam Backup and Restore FQDN des vCenter servers ändern

Problem

veeam-vcenter-ip-aendernNach dem Upgrade des vCenter Servers oder der VCSA (vCenter Server Appliance) hat der neue Server eine neue Identität, also eine neue IP oder einen neuen (externen) DNS-Namen. Die Registrierung in der Veeam Console unter Backup Infrastructure > VMware vSphere Servers > vCenter Servers lässt sich aber im GUI nicht ändern.

Hinweis: Der interne Hostname der Appliance unter Network > Hostname kann nicht geändert werden. Ändert man diesen (zum Beispiel via SSH in der Datenbank), fällt einem der Himmel beim nächsten Reboot der Appliance auf den Kopf. TUT DAS NICHT.

Lösung

Sofern die vCenter Server Datenbank mit den Maschinen-IDs unverändert ist, wie nach einer Migration in der Regel der Fall, lässt sich die Serveradresse an der (Administrator-)PowerShell ändern.

PS C:\> Add-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue
PS C:\> $Servers = Get-VBRServer -name "VCENTEROLDIPORFQDN"
PS C:\> $Servers.SetName("VCENTERNEWIPORFQDN")

Danach nur noch die Veeam-Console neu verbinden und einen rescan auf dem vCenter-Server starten, Fertig.

Update: Es gibt jetzt auch einen offiziellen Veeam KB-Artikel dazu.

Windows 7 Update „Es wird nach Updates gesucht“ dauert ewig, wird nicht fertig

Problem

Seit eingier Zeit funktioniert das Windows Update unter Windows 7 nicht mehr richtig. Ob das ein „Schubser“ in richtung 10 sein soll? 🙂  Das Windows 7 Update steht ewig lange bei „Es wird nach Updates gesucht“ und wird nicht fertig, wenn es fertig wird, findet es manchmal keine Updates. Im %windir%\windowsupdate.log findet man nichtssagende Timeouts („timed out“ um genau zu sein) und sonst sehr wenig. Der Vorgang lässt sich nicht vernünftig anhalten und das Windows-Update-Repair-Tool-Fixit Ding (https://support.microsoft.com/de-de/kb/971058) hilft auch nicht weiter. Dabei wird zudem der Computer teilweise überlastet, indem CPU- und RAM-Ressourcen (durch svchost.exe) entsprechend beansprucht werden.

Lösung

Wenn man sich genau an diese Vorgehensweise hält, läuft danach in der Regel alles wieder richtig. Vorher noch das SP1 installieren (falls noch nicht geschehen), ohne SP1 geht gar nichts.

  1. Reboot. (Clean Boot)
  2. In der systemsteuerung unter Windows Update > Einstellungen ändern die Einstellung „Wichtige Updates“ auf „Nie nach Updates suchen (nicht empfohlen)“ ändern.
  3. Reboot.
  4. DIESE Updates in DIESER Reihenfolge installieren:
    1. Windows 7 64bit
      1. Sicherheitsupdate für Windows 7 für x64-basierte Systeme (KB3078601) vom 11.08.2015
      2. Sicherheitsupdate für Windows 7 für x64-basierte Systeme (KB3087039) vom 05.09.2015
      3. Sicherheitsupdate für Windows 7 für x64-basierte Systeme (KB3109094) vom 05.12.2015
      4. Sicherheitsupdate für Windows 7 für x64-basierte Systeme (KB3145739) vom 11.04.2016
      5. Sicherheitsupdate für Windows 7 für x64-basierte Systeme (KB3168965) vom 11.07.2016
      6. Sicherheitsupdate für Windows 7 für x64-basierte Systeme (KB3185911) vom 12.09.2016
    2. Windows 7 32bit
      1. Sicherheitsupdate für Windows 7 (KB3078601) vom 11.08.2015
      2. Sicherheitsupdate für Windows 7 (KB3087039) vom 05.09.2015
      3. Sicherheitsupdate für Windows 7 (KB3109094) vom 05.12.2015
      4. Sicherheitsupdate für Windows 7 (KB3145739) vom 11.04.2016
      5. Sicherheitsupdate für Windows 7 (KB3168965) vom 11.07.2016
      6. Sicherheitsupdate für Windows 7 (KB3185911) vom 12.09.2016
    3. Windows 8.1 / Server 2012 R2 64bit
      1. Sicherheitsupdate für Windows 8.1 / Server 2012 R2 für x64-basierte Systeme (KB3021910)
      2. Sicherheitsupdate für Windows 8.1 / Server 2012 R2 für x64-basierte Systeme (KB3173424)
      3. Sicherheitsupdate für Windows 8.1 / Server 2012 R2 für x64-basierte Systeme (KB3172614)
    4. Windows 8.1 / Server 2012 R2 32bit
      1. Sicherheitsupdate für Windows 8.1 / Server 2012 R2 (KB3021910)
      2. Sicherheitsupdate für Windows 8.1 / Server 2012 R2 (KB3173424)
      3. Sicherheitsupdate für Windows 8.1 / Server 2012 R2 (KB3172614)
  5. Reboot
  6. Die Einstellung „Wichtige Updates“ auf den ursprünglichen Wert zurücksetzen.
  7. Fertig

Ab hier eine neue Update-Suche starten. Es ist möglich, das das wieder eine ganze Weile dauert und Leistung frisst, aber diesmal wird der Update-Dienst ganz sicehr fertig und kann Updates wieder fehlerfrei installieren.

Thx an Alexander Schimpf: https://alexanderschimpf.de/windows-7-update-es-wird-nach-updates-gesucht
und Dalai: http://wu.krelay.de/

Windows 10 Anmeldung mit Fingerabdruck in Active-Directory Domäne via GPO erlauben

Problem

Windows 10 erlaubt im Prinzip die „komfortable Anmeldung“ mittels PIN und Fingerabdruck über den Live-Account („Microsoft-Account“). Standartmäßig ist das in der Domäne aber deaktiviert und nur die Anmeldung an lokalen Benutzerkonten erlaubt.

Das ist daran zu erkennen, das praktisch alle Optionen unter Einstellungen > Konten > Anmeldeoptionen ausgegraut sind.

Sollte das ebenfalls in der lokalen Anmeldung der Fall sein, ist zumeist der Treiber des Biometrie-Gerätes schuld: Aufgrund der hohen Sicherheitsanforderungen (und dem geldlichen Notleiden des Konzerns) müssen Treiber für die Biometrischen Geräte zur Anmeldung ausnahmslos zertifiziert sein. Eine Menge älterer Treiber (Synaptics, WD, Asus …) sind das nicht und müssen vorher aktualisiert werden.

Sollte das endlich alles klappen, kann man die Biometrische Anmeldung in der Domäne aktivieren.

Lösung

windows10-biometrie-erlauben

Fingerabdruck-Anmeldung und Biometrische Anmeldung via GPO (Gruppenrichtlinie) erlauben:

  1. Computerkonfiguration > Richtlinien > Administrative Vorlagen > Windows-Komponenten Biometrie > Verwendung von Biometrie zulassen
    1. aktivieren
  2. Computerkonfiguration > Richtlinien > Administrative Vorlagen > Windows-Komponenten Biometrie > Benutzeranmeldung mithilfe von Biometrie zulassen
    1. aktivieren
  3. Computerkonfiguration > Richtlinien > Administrative Vorlagen > Windows-Komponenten Biometrie > Bomänenbenutzeranmeldung mithilfe von Biometrie zulassen
    1. aktivieren

Fingerabdruck-Anmeldung via Live-ID (Die PIN ist eine Voraussetzung) mithilfe der GPO (Gruppenrichtlinie) erlauben:

  1. Computerkonfiguration > Richtlinien > Administrative Vorlagen > System > Anmelden > PIN-Anmeldung aktivieren

Wichtig: Bei der Anmeldung via PIN wird das Kennwort des Benutzers im Tresor („Anmeldeinformationsspeicher“) lesbar gespeichert. Mit „lesbar“ ist an dieser Stelle Mimikatz oder ähnliches gemeint.

VMware vCenter Server Appliance Upgrade 5.5 auf 6.0 schlägt fehl: File /usr/lib/vmidentity-firstboot.py (2119876)

Problem

Der Upgrade Assistent in Form des netten HTML-Setups is ausgefüllt, alle Eingaben sind validiert und das Setup legt los. Nach (gefühlten) 10 Minuten steht die Migration still und es erscheint diese unfreundliche Fehlermeldung:

Firstboot script execution error: 
Encountered an internal error. Traceback (most recent call last): File "/usr/lib/vmidentity-firstboot.py", line 202, in main vmidentityFB.boot()
File "/opt/vmware/lib64/vmidentity_firstboot_core.py", line 180, in boot self.dolmport()
File "/opt/vmware/lib64/vmidentity_firstboot_core.py", line 1369, in dolmport self.doLSImport()
File "/opt/vmware/lib64/vmidentity_firstboot_core.py", line 1411, in dolSImport returncode = self.runShellCommand(command, True)
File "/opt/vmware/lib64/vmidentity_firstboot_core.py", line 1515, in runShellCommand args = shlex.split(command)
File "/opt/vmware/lib/python2.7/shlex.py", line 279, in split return list(lex)
File "/opt/vmware/lib/python2.7/shlex.py", line 269, in next token = self.get_token()
File "/opt/vmware/lib/python2.7/shlex.py", line 96, in get_token raw = self.read_token()
File "/opt/vmware/lib/python2.7/shlex.py", line 172, in read_token raise ValueError, "No closing quotation" ValueError: No closing quotation 

This is an unrecoverable error, please retry install.
If you run into this error again, please collect a support bundle and open a support request.

Lösung

Das Kennwort für root und den SSO-Adminbenutzer dürfen keine Sonderzeichen enthalten (/\+()“ Leereichen und so weiter). Einfach eine neues Kennwort nur aus Buchstaben und Zahlen vergeben, schon läuft der Assistent *kopfschüttel*

Das gilt für den root und administrator@vsphere.local, wenn SSO nicht eingerichtet ist.

Update: vmware hat dieses Verhalten zwar nicht gefixt, aber Dokumentiert: https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2119876

Active Directory Zertifikatsdienste Webregistrierung Fehler 0x80070057 (WIN32: 87)

Problem

Wenn man versucht die Zertifizierungsstellen-Webregistrierung nach der Installation oder Migration (oder Wiederherstellung einer CA) zu installieren („Konfiguration abschliessen“), tritt dieser Fehler auf:

Certification Authority Web Enrollment: Konfiguration fehlgeschlagen
Active Directory Certificate Services-Setup ist fehlgeschlagen mit dem folgenden Fehler: Der Parameter ist falsch. 0x80070057 (WIN32: 87)

0x80070057-windows-ca-zertifizierungsstelleLösung

Mir sind bisher zwei Ursachen untergekommen, wahrscheinlicher ist die zweite.

Möglichkeit 1

Die Node zu den Public-Key Services im Active Directory existiert (noch) nicht oder der ausführende Benutzer hat keine Berechtigungen darin.

  1. ADSIEdit öffnen, Zum Konfigurationskontext verbinden
  2. Zu dieser Node navigieren: CN=Public Key Services, CN=Services, CN=Configuration, DC=DOMAIN,DC=TLD
  3. Wenn diese noch nicht existiert, anlegen.
  4. Wenn diese existiert, die Rechte auf den Schlüssel prüfen. Die Organisations-Admins sollten hier Vollzugriff haben (und der Account der das Setup abschliesst sollte dort Mitglied sein)

0x80070057-windows-ca-zertifizierungsstelle-ldap
Möglichkeit 2 (*wahrscheinlich*)

Das wahrscheinlichere Problem ist, dass der Wert des Schlüssels Setupstatus unter HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration falsche Daten enthält. Vermutlich steht hier der (HEX) Wert 6003 drin. Der Wert 6003 zeigt an, dass CA Webregistrierung bereits installiert ist. Der korrekte Wert für die Aktivierung lautet 6001 (not installed).

  1. In HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration den Wert Setupstatus von 6003 in 6001 ändern:
    certutil -setreg config \ Setupstatus 0x6001
  2. Den Abschluss von Setup erneut versuchen