VBS & Acronis TrueImage: volllaufen der Platte verhindern

cumulonimbus8

Fleet Admiral
Registriert
Apr. 2012
Beiträge
18.451
Hallo!

Ich bin nicht sicher ob das hier eher ins Unterforum Programmieren gehört oder hierher weil ich auf evtl. schon existente Konzepte und Skripte hoffe die sich um Backupen drehen.

Die Lage ist, dass mir Acronis' SecureZone nicht zusagt (liebevoll formuliert) und ich lieber direkt fassbare Archive hätte (denn die kann ich wegsichern!) Dazu folgendes Schema: Acronis legt seine Sicherung in einem Ordner an. Ein Skript (ein «Nach-Skript» - oder doch «Vor-Skript»?!) identifiziert die eben erzeugte Datei und das Restvolumen des Laufwerks und wirft bei Unterschreiten eines Schwellwertes des Freiraums die älteste Sicherung (die wiederum identifiziert werden muss) über Bord damit ›morgen‹ die neue genug Platz hat usw.

Nun ist TI2014 so bekloppt nicht mich bestimmen zu lassen wie exakt die Archivdatei heißt, oh nein; das muss ein selstberfundener chaotischer Name sein, völlig un–sprechend.
Also muss ich… 1. den aktuellen Leerraum ermitteln, OK. 2. alle Images abklappern und zwar nach Name plus Datum & Zeit. Und genau da hapert es. Was DOS einfach als Info liefern könnte bekomme ich meines Wissens nach nicht per Batch und auch nicht per VBS (WSH). Zumindest denke ich nicht an klimmzüe DIR in ein Fil zu lenken, das mit FOR-IN zu zerlegen um vielleicht Namen und Datümser sortiert zu bekommen. In VBS sehe ich da aber auch keinen Zugriff auf diese Informationen - oder doch?

Wie bekomme ich also all die Infos zusammen? Dateien, aber ohne mir bekannten Namen, deren Alter nebst Löschen? Dass ein Tool wie TI das nicht selber nach Benutzerwunsch kann ist beschämend.

Oder gibts vielleicht irgendwas wo man spicken könnte..?

CN8
 
Vielleicht versteh ich dich falsch aber das geht doch super in VBS
Code um die Filegröße in MB und das CreationDate zu bekommen

Code:
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.GetFile("C:\Windows\regedit.exe")
WScript.Echo file.Size / 1024 / 1024
WScript.Echo file.DateCreated

Das ist der Code um den freien Speicher einer Festplatte in GB zu bekommen
Code:
Set objWMIService = GetObject("winmgmts:")
Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='c:'")
WScript.Echo objLogicalDisk.FreeSpace / 1024 / 1024 / 1024

Das Interessanteste ist wie du das Triggerst. Kann man beim acronis einfach was ausführen lassen wenns fertig ist?
Ansonsten, falls sich Acronis in die Ereignisanzeige einträgt wenns fertig ist, Scheduled Task auf die Ereignis ID vielleicht, oder du machst Acronis per Commandozeile und das Script direkt danach, oder du machst einen Task der alle x Stunden prüft, oder du lässt das Script permanent in einer schleife Laufen. Wenn du nicht rausfinden kannst woher die Namen beim Acronis kommen musst dir halt einfach merken wieviel Files beim letzten mal in dem Ordner waren und wenns mehr werden dann aktiv werden im Script.
 
Acronis kann selbst besagt Vor- und Nach-Skriprte auslösen. Das macht es einfacher.

Das Problem ist:
Set file = fso.GetFile("C:\Windows\regedit.exe")
Ich muss mit einem Haufen Namen hantieren - die ich nun gerade eben nicht kenne weil die Archive einer sinnlosen Logik nach benannt werden.

→ Bei TI V11 konnte ich den geschriebenen Archivnamen definieren und primitive FOR-IN-Schleifen haben umbenannt um die ›Kette‹ von Archivdateien eine laufende Nummer weiterzuschieben (im Vorlauf wird die höchste, bekannte=definierte, gelöscht, dann aufsteigend umbenannt und das Neue wird zur Nummer 1 Umbenamst). Die Anzahl hat den konsumierten Platz definiert.
Und genau das kann ich alles nicht weil nicht weiß welche Datei das zuletzt geschriebene Archiv zu sein geruht. Ich riskiere nicht mal die altbekannte numerische Kette (durch besagtes Umbneamsen usw.), um auf Verdacht irgendwas Geschriebenes mit REN und XXX*.tib in diese Nummer 1 zu wandeln.

Ich muss also Dateien sammeln, deren Eigenschaften (Datum), das sortieren und vorher löschen, ein Nach-Skript brauche ich dann nicht. Und auch das zyklische Umbenennen der laufenden Nummern kann ich weglassen. (Gut; zyklische Namen sind bequemer fürs Auge, aber das nehme ich hin.)
Bloß hatte ich gehofft, so was irgendwo spicken zu können statt das Rad neu erfinden zu müssen.

Das mit dem wmiService muss ich mal notieren, aber soweit ein Test im Halbschlaf zeigte müsste
Code:
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim Drive
Set Drive = FSO.Drives("C")
WScript.Echo Drive.AvailableSpace
auch die Größeninfo liefern - oder hat diese Funktion ein Loch?

CN8
 
Wenn du den Namen nicht kennst mach alle Files in den Selben Ordner. Dann kreigst du mit

Code:
Set folder = fso.GetFolder("C:\temp\")
For Each f In folder.Files
	WScript.Echo f.Name
Next

alle Files kriegen egal wie sie heißen
 
…so langsam kommen wir der Sache näher. Und irgendwie kommt die das auch bekannt vor. Wenn ich in meiner Codschipselsammlung doch mal fände was ich bräuchte :heilig:

Jetzt muss ein Array her und die Datumsakrobatik. Mal sehen wie da ein Größer oder Kleiner greift. Ich mach ††† wenn ich Acronis wieder unter Kontrolle und die SecureZone abgesägt habe.

CN8
 
Zurück
Oben