Jump to content

VSS per Powershell-Script ausdünnen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

Ich brächte mal eure Hilfe.

 

Ich habe mir vorgenommen mit Hilfe eines PS-Scripts die Schattenkopien auf unserem File-Server täglich auszudünnen, sodass es, je weiter es in die Vergangenheit geht, weniger Schattenkopien gibt.

 

Erst mal zu Umgebung:

 

Der File-Server ist ein Server 2012

Mo-Fr werden täglich 10 Schattenkopien erstellt (stündlich 07:00-16:00)

Da der Server2012 max. 64 Schattenkopien haben kann können wir max 6,5 Tage zurück.

 

Ich habe mir gedacht, dass Mo-Fr um 19:00 ein Skript durchläuft, dass 6 der Schattenkopien vom Vortag löscht.

 

Ich versuche mich nun schon seit einigen Tagen an diesem Script, aber komm nicht wirklich gut voran.

Liegt wahrscheinlich daran, dass die Behauptung ich hätte Grundkenntnisse, sehr freundlich ausgedrückt ist :D .

 

Also mein konkretes Problem aktuell ist:

 

mit dem Befehl VSSadmin list shadows for=G: >C:\tempVSS_G.temp bekomme ich eine Liste aller Schattenkopien für das Laufwerk G. Pro VSS gibt es einen solchen Eintrag:

 

Contents of shadow copy set ID: {af381576-f0d7-4326-99a5-f319700b124c}
   Contained 1 shadow copies at creation time: 21.02.2014 07:00:30
      Shadow Copy ID: {6967dab4-46bf-4d56-8f1b-77a53839b420}
         Original Volume: (I:)\\?\Volume{acb2fd50-0094-11e1-8e1a-005056974acf}\
         Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy458
         Originating Machine: FLSRV1.corp.frimo.com
         Service Machine: FLSRV1.corp.frimo.com
         Provider: 'Microsoft Software Shadow Copy provider 1.0'
         Type: ClientAccessible
         Attributes: Persistent, Client-accessible, No auto release, No writers, Differential

 

 

Im ersten Schritt muss ich nach dem Datum suchen, dass einen Tag zurück liegt.

Dann Abfragen, ob die Stunde = 08, 09, 11, 12, 14 oder 15 ist. Wenn ja, soll die Shadow Copy ID aus der nächsten Zeile in eine Variable (z.B. $VSST1H15) geschrieben werden.

 

Dann würde ich mit VSSadmin delete shadows /shadow="{$VSST1H15}" die Schattenkopie löschen.

 

Könnt ihr mir hierbei helfen oder ist das viel zu komplex?

 

LG

PeetFr

Link zu diesem Kommentar

Für den aktuellen Tag soll stündlich eine Schattenkopie da sein, da es häufiger vorkommt, dass jemand eine Datei löscht oder verändert und dann den Stand kurz vorher benötigt.

Aber je weiter es in die Vergangenheit geht, desto weniger Shattenkopien sind nötig.

Das lässt sich mit Windows-Bord-Mittel nicht lösen (so weit ich weiß).

Deshalb soll das Skript einige der Schattenkopien vom Vortag löschen. So ist es möglich mit den Schattenkopien deutlich weiter in die Vergangenheit zu kommen.

Link zu diesem Kommentar

Wenn Du die PowerShell nimmst, dann arbeite objektorientiert und nicht zeichenorientiert. Das ist ja so Unix ;-) Die Liste der Schattenkopien kriegst Du über WMI:

Get-WmiObject Win32_Shadowcopy

Damit bekommst Du alle Schattenkopien raus. Jetzt kanst Du mit einer FOR-Schleife die einzelnen Elemente bearbeiten:

Get-WmiObject Win32_Shadowcopy | ForEach-Object {
...
}

Ein einfaches Beispiel findest Du in PowerShell Script to delete shadow copies over 30 days old. Da siehst Du auch, wie man mit dem Datum arbeiten kann.

 

Have fun!
Daniel

Link zu diesem Kommentar

Nach etwas Anpassen des Skripts sind die ersten Tests sehr gut.

Nochmals Danke für die Hilfe.

 

Hier das Skript, falls jemand etwas ähnliches braucht:

 

 

Get-WmiObject Win32_Shadowcopy | ForEach-Object {

$WmiSnapShotDate = $_.InstallDate
$strShadowID = $_.ID
$dtmSnapShotDate = [management.managementDateTimeConverter]::ToDateTime($WmiSnapShotDate)
$dtmCurDate = Get-Date

$dtmTimeSpan = New-TimeSpan $dtmSnapShotDate $dtmCurDate
$intNumberDays = $dtmTimeSpan.Days
$intHour = $dtmSnapShotDate.Hour

If ($intNumberDays -eq 1 -and ($intHour -eq 15 -or $intHour -eq 14 -or $intHour -eq 12 -or $intHour -eq 11 -or $intHour -eq 9 -or $intHour -eq 8)) {
 
  Vssadmin delete shadows /shadow="$strShadowID"
}
If ($intNumberDays -eq 4 -and $intHour -eq 10) {
 
  Vssadmin delete shadows /shadow="$strShadowID"
}
}

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...