Volumenschattenkopie (VSS) Wiederherstellung „Quellpfad ist zu lang“

Problem

Wärend einer Restore-Datenrettung mit VSS (Volumenschattenkopien) über die praktische Funktion „Vorgängerversion wiederherstellen“ tritt der Fehler „Quellpfad ist zu lang“ auf:

Die Quelldateinamen sind zu lang für das Dateisystem. Verschieben Sie
sie an einen anderen Ort, der einen kürzeren Pfadnamen hat, oder benennen
Sie sie in kürzere Namn um, bevor Sie den Vorgang fortsetzen.

 

Lösung

Das stimmt, solche Pfade geraten bei tiefen Filestrukturen recht schnell an das gute alte „MAX_PATH“ limit von gigantischen 260 Zeichen. „Char260 ought to be enough for anybody“ 🙂

  1. Im „normalen“ Explorer mit der rechten MT auf den betroffenen Ordner (oder die Datei) > „Vorgängerversion wiederherstellen“
  2. Nun die passende Version auswählen um die es geht > „Öffnen“
  3. In dem neuen Fenster den übergeordneten Ordner mit der rechten MT anklicken > „Eigenschaften“
  4. Auf dem Tab „Allgemein“ gibt es das Feld „Ort“. Da steht etwas drin, das aussieht wie „\\localhost\T$\@GMT-2017.01.01-01.00.22\Die ist ein verdammt langer Ordnernamen“. Diesen Pfad komplett kopieren (STRG+C).
  5. An der Kommandozeile (CMD) läst sich dieser Pfad nun via Subst deutlich verkürzt als Laufwerk verbinden:
    C:\> subst x: "\\localhost\D$\@GMT-2017.01.001-01.0.22\Dies ist der laengste Ordnername der Welt"
    1. Subst funktioniert nur auf einem lokalen NTFS-Host
    2. Bei Remote-Servern einfach subst durch ’net use‘ ersetzen
      net use x: "\\\\@GMT-2017.01.001-01.0.22\Dies ist der laengste Ordnername der Welt"
  6. Jetzt kann man mit seinem Lieblingswerkzeug die Daten von dem neuen Laufwerk kopieren. Auch an den alten Ort, kein Problem.

Achtung

  1. Nachdem das fertig ist, muss das Substituierte Laufwerk auch wieder weg. Das geht mit dem Subst-Parameter /d:
    C:\> subst x: /d
  2. Man braucht den Platz für die Dateien zweimal (!). Einmal im Dateisystem und einmal verbleiben diese im VSS.

Wo ist der Windows 10 (Windows Server 2012/2016) Autostart Ordner?

Windows 10 Autostart Ordner„Aus gegebenem Anlass“ (*wink* Praktikant*) hier noch einmal die Pfade zur den wichtigsten Windows 10 (und Windows Server 2012R2/2016) Autostart-Ordnern. Obwohl der „autostart“-Folder nicht mehr im Startmenü angezeigt wird, gibt es ihn noch und er tut noch seinen Dienst.

Autostart-Pfad (Lokaler Benutzer)

"C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"

oder

"%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"

Ausführen-Link:

"shell:startup"

Autostart-Pfad (Alle Benutzer)

"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"

oder

"%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\StartUp"

Ausführen-Link:

"shell:common startup"

Active Directoryx Zertifikatdienste („certsvc“) starten nach Upgrade nicht 0X422 (WIN32: 1058 ERROR_SERVICE_DISABLED)

Problem

Nach einem In-Place Upgrade von Windows Server 2012/2012R2 auf Windows Server 2016 werden die „Active Directory-Zertifikatdienste“ (certsvc) nicht mehr gestartet. Versucht man das in der Zertifizierungsstellenkonsole manuell nachzuholen, erhält man diesen fiesen (und zudem falsch übersetzen) Fehler:

Windows konnte Active Directory-Zertifikatdienste-Dienst auf dem lokalen Computer nicht gestartet werden.
Fehler 1058: Der Dienst kann nicht gestartet werden deaktiviert ist oder weil keine Geräte zugeordnet aktiviert hat.
Versucht man es in der Diensteverwaltun heisst es:
Der Dienst kann nicht gestartet werden, weil er deaktiviert wurde oder nicht zugeordneten Geräte aktiviert ist.
0X422 (WIN32: 1058 ERROR_SERVICE_DISABLED)

Um es für den Admin noch spannender zu machen, gibt es auch keine Einträge im System- oder Anwendungsprotokoll. Es passiert einfach nichts.

Lösung

Jetzt wird es peinlich: Ein Systemneustart hilft. Boot toot goot.

Die Dienstregistrierung der Zertifizierungsstelle passiert erst, wenn die CERTCONFIG wieder ausgepackt ist. Das passiert beim ersten erfolgreichen Systemstart. Danach starten auch die Dienste wieder …

Update: Ab genau jetzt ist dieses Verhalten sogar offiziell 🙂 Schön wenn man Microsoft auch mal helfen kann …

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-%YYYY%%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.