Symlink auf Schattenkopie erstellen

  • VBScript

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Manné.

    Symlink auf Schattenkopie erstellen

    Hallo,

    folgendes Script habe ich mir zusammen gebaut. Das Scipt liest das Device Object einer Schattenkopie (es existiert immer nur eine Schattenkopie) aus und soll einen Symlink darauf erstellen.
    Wenn ich versuche "\\?\GLOBALROOT\DEVICE\HarddiskVolumeShadowCopy31" in der cmd-Codezeile durch "objItem.DeviceObject" zu ersetzen bekomme ich eine Fehlermeldung (Objekt erwartet).
    Ich habe zig Variationen mit "", chr34 und & versucht.
    Es ist bestimmt ganz einfach, für jemanden der sich ein bisschen in vbs auskennt. Ich komme einfach nicht drauf und nach stundenlangem suchen bitte ich um Hilfe.

    Im Voraus besten Dank


    Visual Basic-Quellcode

    1. ' SymLink auf backup erstellen
    2. ' Script muss mit Verknüpfung und Admin-Rechten gestartet werden!!
    3. Set wshshell = WScript.CreateObject ("wscript.shell")
    4. strComputer = "."
    5. Set objWMIService = GetObject("winmgmts:" _
    6. & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    7. Set colItems = objWMIService.ExecQuery("Select * from Win32_ShadowCopy")
    8. For Each objItem in colItems
    9. WScript.Echo "Device object: " & objItem.DeviceObject
    10. Next
    11. Set oShell = WScript.CreateObject ("WScript.Shell")
    12. oShell.Run "cmd /c mklink /D c:\backup \\?\GLOBALROOT\DEVICE\HarddiskVolumeShadowCopy31\", 1, True


    *Code-BBCode eingefügt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Die Echo-Anweisung vorher gibt aber korrekte Werte aus (Zeile 12)?

    So müsste es rein vom Syntax her eigentlich gehen:

    Visual Basic-Quellcode

    1. oShell.Run "cmd /c mklink /D c:\backup " & objItem.DeviceObject, 1, True


    Wenn objItem.DeviceObject Leerzeichen enthält, dann aber so:

    Visual Basic-Quellcode

    1. oShell.Run "cmd /c mklink /D c:\backup " & chr(34) & objItem.DeviceObject & chr(34), 1, True
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Das deutet darauf hin, dass objItem kein Objekt ist.

    Daher meine Frage:

    Die Echo-Anweisung vorher gibt aber korrekte Werte aus (Zeile 12)?

    Allerdings fällt mir jetzt gerade auf, dass nach dem For Each die Variable objItem undefiniert sein könnte, was letztendlich auch zu der genannten Fehlermeldung führen würde.

    Wenn es tatsächlich nur ein Ergebnis gibt, dann mach nach dem Echo-Part (nach dem Next!) ein objItem = colItems(0).
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Oh, ich hatte das Fragezeichen übersehen. Ja die Ausgabe ist genau richtig.

    objItem = colItems(0)
    habe ich eingefügt, in Zeile 14

    Fehlermeldung Zeile 14, Allgemeiner Fehler
    Quelle: SWbemObjectSet

    Vielleicht kannst du was damit anfangen.

    Zwischendurch mal vielen Dank für deine Mühe
    Ich hab den Fehler gefunden. Die Erstellung des Symlinks muss innerhalb der For-Schleife erfolgen.
    Nochmals Danke, Gruß Manfred


    Set colItems = objWMIService.ExecQuery("Select * from Win32_ShadowCopy")
    For Each objItem in colItems
        WScript.Echo "Device object: " & objItem.DeviceObject

        ' Symlink auf Schattenkopie erstellen   
        Set oShell = WScript.CreateObject ("WScript.Shell")
        oShell.Run "cmd /c mklink /D c:\backup " & objItem.DeviceObject, 1, True    
    Next