raven16
Goto Top

Powershell - Verschieben von wichtigen Dateien über ein Netzwerk

Diese Frage richtet sich an Mitglieder, die schon ein wenig Erfahrungen im Bereich Kopieren/Verschieben über das Netzwerk mit Powershell sammeln konnten.

Hallo zusammen,

ich benutze im Augenblick ein eigenes PS-Skript, welches im Fehlerfall eines Datensicherungsdienstes wichtige Dateien zu Datensicherung einer Oracle-Datenbank auf eine Datenablage, die sich im Netzwerk befindet, auslagern soll.

Derzeit benutze ich nicht Move-Item, um die Datei zu kopieren, sondern mache einen Umweg:
#Kopiervorgang
Copy-Item -LiteralPath ($location + $logfile[$s]) -Destination $destination 	
logging ("Kopiere " + $logfile[$s] + " auf Datenablage")  
if(Test-Path -Path ($destination + $logfile[$s]))
{
	#Löschvorgang
	Remove-Item -LiteralPath ($location + $logfile[$s])
	logging ("Lösche " + $logfile[$s] + " auf Oracle-Instanz")  
	$s ++
	
}
else
{
	echo (("Fehler beim kopieren von ") + ($location + $logfile[$s]) + " auf Datenablage")  
	logging ("Fehler beim kopieren von " + $logfile[$s] + " auf Datenablage")  
}

Ich kopiere zuerst die Datei auf die Datenablage, prüfe danach ob die Datei dort vorhanden ist und lösche danach die Datei.

Meine Frage dazu ist, ob meine Variante so sicher ist oder ob ich, um einen sicheren "Move-" bzw. Kopiervorgang zu realisieren, nicht doch besser eine andere Methode verwenden sollte.

Wichtig ist mir, dass keine Datei beim Kopieren oder Verschieben über das Netzwerk verloren gehen oder beschädigt werden darf, weil sonst eine Datenwiederherstellung der Oracle-Datenbank nicht mehr möglich ist.

Vielen Dank.

Content-ID: 195599

Url: https://administrator.de/contentid/195599

Ausgedruckt am: 26.11.2024 um 06:11 Uhr

Hitman4021
Hitman4021 10.12.2012 um 10:49:10 Uhr
Goto Top
Hallo,

mach vor und nach dem kopieren auf jede Datei einen MD5-Hash und vergleiche diese. Danach weißt du ob die Datei beschädigt wurde oder nicht. In deinem Fall prüfst du ja nur ob die Datei vorhanden ist oder nicht.

PS.: Bitte benutz die < code > < /code > Tags (ohne Leerzeichen).

Gruß
raven16
raven16 10.12.2012 um 11:01:28 Uhr
Goto Top
Danke.
Die < code > Funktion habe ich in der Formatierungshilfe irgendwie nicht auf Anhieb finden können.

Das ich die Datei nur auf vorhandensein prüfe stimmt wohl.
Ein MD5-Hash zu Überprüfung ist ein guter Ansatz, danke dafür.
Werde ich definitiv noch ausprobieren und die Lösung hier noch veröffentlichen oder mich melden, wenn ich noch Probleme damit bekomme.
raven16
raven16 10.12.2012 um 13:52:18 Uhr
Goto Top
###MD5-Checksumme
function md5-checksum([String]$md5Path)
{
	$file = $md5Path
	$algo = [System.Security.Cryptography.HashAlgorithm]::Create("MD5")  
	$stream = New-Object System.IO.FileStream($file, [System.IO.FileMode]::Open)
	$md5StringBuilder = New-Object System.Text.StringBuilder
	$algo.ComputeHash($stream) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) }  
	$md5StringBuilder.ToString()
	$md5Hash = $stream.Dispose()
}

Mit dieser Funktion wird aus dem Übergabeparameter ein MD5-Hash erzeugt und in $md5Hash gespeichert.
Das klappt somit ganz gut.
Nur leider würde ich auch gerne verstehen, was dort geschieht. Ich kann mir diese Zeilen noch nicht ganz genau erklären, weil ich dafür dann doch noch zu wenig Kenntnisse in PS habe:
$algo = [System.Security.Cryptography.HashAlgorithm]::Create("MD5")  
$stream = New-Object System.IO.FileStream($file, [System.IO.FileMode]::Open)
$md5StringBuilder = New-Object System.Text.StringBuilder
$algo.ComputeHash($stream) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) }  

Wäre schön, wenn mir jemand, der versteht, was dort genau umgesetzt wird, Zeile für Zeile mal erklären könnte.