PeetFr 0 Geschrieben 4. März 2014 Melden Teilen Geschrieben 4. März 2014 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 Zitieren Link zu diesem Kommentar
Daniel -MSFT- 129 Geschrieben 4. März 2014 Melden Teilen Geschrieben 4. März 2014 Mal eine Gegenfrage: Warum willst Du die nachträglich löschen und planst nicht die Erstellung der Schattenkopien nach Deinem Bedarf? http://www.techotopia.com/index.php/Configuring_Volume_Shadow_Copy_on_Windows_Server_2008 Zitieren Link zu diesem Kommentar
PeetFr 0 Geschrieben 4. März 2014 Autor Melden Teilen Geschrieben 4. März 2014 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. Zitieren Link zu diesem Kommentar
Daniel -MSFT- 129 Geschrieben 4. März 2014 Melden Teilen Geschrieben 4. März 2014 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 Zitieren Link zu diesem Kommentar
PeetFr 0 Geschrieben 4. März 2014 Autor Melden Teilen Geschrieben 4. März 2014 Danke für die schnelle Antwort! Ich werde es morgen probieren, heute schaffe ich es nicht mehr. Zitieren Link zu diesem Kommentar
PeetFr 0 Geschrieben 5. März 2014 Autor Melden Teilen Geschrieben 5. März 2014 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"}} Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.