none
Aufruf von Disk2VHD mit Prüfung des Rückgabewertes RRS feed

  • Frage

  • Hallo,

    ich möchte mir über ein Script automatisiert auf einem Server 2008 R2 eine VHD aller Laufwerke mit dem Sysinternals Tool "disk2vhd.exe" erstellen lassen. Das Script soll erst nach der Erstellung der VHDs fortfahren.
    Wichtig ist besonders, dass eine Prüfung stattfindet, ob die VHD(s) mit disk2vhd auch ordnungsgemäß erzeugt wurden. Hierzu soll nach dem Beenden des Aufrufs von disk2vhd geprüft werden, ob das Programm ordnungsgemäß durchgelaufen ist, oder ob es bei der Erstellung irgendeinen Fehler gab (etwa im Schattenkopiedienst oder ähnliches) auftrat. Die Prüfung soll zwingend bei der Erstellung erfolgen - also beim Aufruf bzw. beim Beenden des Aufrufs - und nicht etwa durch nachträgliche Dateigrößenprüfung, Datumsprüfung oder ähnliches!

    Bei Batch-Scripts arbeitete man soweit ich weiß noch mit Rückgabewerten oder Errorcodes - dies scheint bei der PowerShell aber etwas anders zu laufen. Leider scheinen $?, $LASTEXITCODE oder $Error den Ergebniscode von disk2vhd nicht aufzunehmen. Bzw. weiß ich nicht, ob ein dort geloggter Fehler von Disk2VHD oder einer Codezeile früher resultiert. Bislang war es mir zumindest nicht möglich herauszufinden, an welcher Stelle so ein Rückgabewert auftaucht bzw. wie ich diesen abgreifen muss und identifizieren kann. Derzeit sieht der relevante Teil des Scripts wie folgt auf:

    $Programmpfad = "C:\Disk2vhd\disk2vhd.exe" 
    $Sicherungspfad = "\\SERVERNAME\Freigabe$\_VHDs\"
    $Computername = "_DUMMY_COMPUTERNAME"
    $Computername = Get-Content env:Computername
    
    $VHD_Dateipfad = $Sicherungspfad + $Computername + ".VHD"
    $LOG_Dateipfad = $Sicherungspfad + $Computername + ".LOG"
    
    
    $argumente = "* " + VHD_Dateipfad 
    Start-Process $Programmpfad -ErrorAction Continue -ArgumentList $argumente -WindowStyle Hidden -PassThru  | Wait-Process

    PS: Eine Try/Catch Behandlung generiert auch keinen Fehler bei der Erstellung der VHD-Datei, solange disk2vhd nicht durch einen Systemfehler beendet wird. Sprich: Es wird nur ein Fehler erkennt, der das Programm betrifft (etwa: disk2vhd-prozess crashed), nicht aber einen Fehler während der VHD-Erstellung (etwa: eine unterbrochene Netzwerkverbindung).

    Ich sage schon jetzt danke an alle Helfer! Unnötig zu sagen, dass meine PowerShell Erfahrungen noch recht übersichtlich sind ;-)

    VG

    Freitag, 24. Mai 2013 14:54

Antworten

  • Ahhhhhhh - Danke für den Hinweis!! ;-)

    Also, habe es nun mal im Command Promt wie folgt ausgeführt:

    # Als Admin in einer DOS-Box ausgeführt
    #######################################
    # Aufruf eines nicht unterstützten Laufwerks e:
    C:\Windows\system32>C:\Disk2vhd\disk2vhd.exe e: c:\test\test.vhd
    C:\Windows\system32>echo %errorlevel%
    9009
    # Aufruf eines unterstützten Laufwerks b:
    C:\Windows\system32>C:\Disk2vhd\disk2vhd.exe b: c:\test\test.vhd /accepteula
    C:\Windows\system32>echo %errorlevel%
    9009
    # Aufruf eines unterstützten Laufwerks c: mit Trennung der Verbindung während der Sicherung
    C:\Windows\system32>C:\Disk2vhd\disk2vhd.exe c: \\BACKUP\Virtuell$\_VHDs\test.vhd
    C:\Windows\system32>echo %errorlevel%
    9009

    Leider ist das Ergebnis das gleiche. Diesmal bekomme ich allerdings nicht 0, sondern 9009 stets als Rückgabecode. Zwar bekomme ich auch 5 (Zugriff verweigert), wenn ich entsprechend ohne Berechtigungen arbeite, aber dies sind wie gesagt Fehlercodes die den disk2vhd-Prozess direkt betreffen. An dem Fehlercode ändert sich nichts, egal welche oder ob es Probleme beim Erstellen der VHD gibt.

    Montag, 27. Mai 2013 10:05

Alle Antworten

  • Hallo,

    in der vorletzten Zeile fehlt ein $ vor der Variablen VHD_Dateipfad --> $VHD_Dateipfad, die Befuellung von $Computername ist doppelt und das kannst Du so ein wenig kuerzer schreiben.
    $Computername = $env:Computername

    Anstelle von | Wait-Process kannst du gleich bei Start-Process den Parameter -Wait verwenden.

    Schau Dir die Hilfe zu Start-Process an, dort gibt es einen Parameter RedirectStandardError, der koennte helfen.

    Beste Gruesse
    brima


    • Bearbeitet brima Freitag, 24. Mai 2013 18:31
    Freitag, 24. Mai 2013 18:30
  • Hallo,

    hier ist noch eine anderer Loesungsansatz, wenn der der Parameter Redirec... doch nicht die Loesung ist.

    Hier ein Beipiel mit XCOPY dem ich nicht vorhandene Laufwerke uebergebe, was zu einem Exitcode 4 fuehrt, der auch so ausgegeben wird mit der Zeile
    $ProcessObject.ExitCode

    Beste Gruesse
    brima

    $MyProcess = New-Object System.Diagnostics.ProcessStartInfo
    $MyProcess.FileName = "xcopy"
    $MyProcess.RedirectStandardError = $true
    $MyProcess.RedirectStandardOutput = $true
    $MyProcess.UseShellExecute = $false
    $MyProcess.Arguments = "X: Y:"
    $ProcessObject = New-Object System.Diagnostics.Process
    $ProcessObject.StartInfo = $MyProcess
    $ProcessObject.Start() | Out-Null
    $ProcessObject.WaitForExit()
    $ProcessObject.StandardOutput.ReadToEnd()
    $ProcessObject.StandardError.ReadToEnd()
    $ProcessObject.ExitCode
    PS C:\> $ProcessObject.StandardOutput.ReadToEnd()
    0 Datei(en) kopiert
    
    PS C:\> $ProcessObject.StandardError.ReadToEnd()
    Ungültige Laufwerkangabe
    
    PS C:\> $ProcessObject.ExitCode
    4



    • Bearbeitet brima Freitag, 24. Mai 2013 20:00
    Freitag, 24. Mai 2013 19:59
  • in der vorletzten Zeile fehlt ein $ vor der Variablen VHD_Dateipfad --> $VHD_Dateipfad,

    Stimmt, Danke! War ein Tippfehler ;-)

    die Befuellung von $Computername ist doppelt und das kannst Du so ein wenig kuerzer schreiben.
    $Computername = $env:Computername

    Ok... Danke für den Tipp!

    Anstelle von | Wait-Process kannst du gleich bei Start-Process den Parameter -Wait verwenden.

    Hatte ich eingangs auch, allerdings schien es (zumindest beim Debugging und aufgrund der Konsolenausgaben) so, als würde er das "-Wait" ignorieren. Aber gut zu wissen, dass der Ansatz doch richtig war - dann teste ichs nochmal und lasse ich die Pipe zukünftig weg...

    Schau Dir die Hilfe zu Start-Process an, dort gibt es einen Parameter RedirectStandardError, der koennte helfen.macht

    Muss ich nochmal machen. Die Funktionsweise ist mir noch nicht ganz klar. 
    Ganz unten siehst du das Ergebnis deiner Zeiten Lösung. Offenbar liefert disk2vhd leider immer am Ende eine 0 zurück, solange das Programm selbst (also sprich der disk2vhd-Prozess) keinen unbehandelten Fehler durchläuft. Ich hoffte sehr, dass ich die Programmfehler doch noch irgendwie abfragen kann. Allerdings ist disk2vhd ja auch kein klassisches Konsolenprogramm wie xcopy, sondern eine Anwendung die auch eine GUI besitzt. Vielleicht sind ja Rückgabewerte auf Konsolenebene einfach hier nicht vorgesehen?!

    Hallo brima,

    erstmal vielen Dank für deine schnelle Rückmeldung! Meine Kommentare zur ersten Antwort findest du oben ;-)
    $LASTEXITCODE ist leider immer leer. Ich habe auch mal die Lösung deiner zweiten Nachricht umgesetzt: Leider liefert der ExitCode immer 0 zurück. Egal ob das Programm eine VHD erstellen konnte oder ob es einen Fehler gab. Disk2VHD ist ja auch zu keinem Zeitpunkt abgestürzt - und Rückgabewerte sind leider offenbar in dem Programm nicht vorgesehen. Ziemlich doof, da ich nun keinen Schimmer habe, wie ich so die korrekte Erstellung der VHDs checken soll :-/

    Trotzdem erstmal bis hierhin herzlichen Dank. Wenn du noch eine andere Idee hast, wie man die Ausgaben prüfen könnte, wäre das genial. Ich werde mich nochmal mit dem RedirectStandardError bei meinem Aufruf befassen.

    Ich nehme an, dass mit aber $Error[0] oder $? auch nicht weiterhelfen, oder?

    VG

    PS C:\Windows\system32> $Argumente = "E: C:\Users\xxx\Desktop\xxx.VHD"
    $MyProcess = New-Object System.Diagnostics.ProcessStartInfo
    $MyProcess.FileName = $Programmpfad
    $MyProcess.RedirectStandardError = $true
    $MyProcess.RedirectStandardOutput = $true
    $MyProcess.UseShellExecute = $false
    $MyProcess.Arguments = $Argumente
    $ProcessObject = New-Object System.Diagnostics.Process
    $ProcessObject.StartInfo = $MyProcess
    $ProcessObject.Start() | Out-Null
    $ProcessObject.WaitForExit()
    $ProcessObject.StandardOutput.ReadToEnd()
    $ProcessObject.StandardError.ReadToEnd()
    $ProcessObject.ExitCode
    
    
    
    0
    
    PS C:\Windows\system32> $Argumente = "b: C:\Users\xxx\Desktop\xxx.VHD"
    $MyProcess = New-Object System.Diagnostics.ProcessStartInfo
    $MyProcess.FileName = $Programmpfad
    $MyProcess.RedirectStandardError = $true
    $MyProcess.RedirectStandardOutput = $true
    $MyProcess.UseShellExecute = $false
    $MyProcess.Arguments = $Argumente
    $ProcessObject = New-Object System.Diagnostics.Process
    $ProcessObject.StartInfo = $MyProcess
    $ProcessObject.Start() | Out-Null
    $ProcessObject.WaitForExit()
    $ProcessObject.StandardOutput.ReadToEnd()
    $ProcessObject.StandardError.ReadToEnd()
    $ProcessObject.ExitCode
    
    
    0
    Freitag, 24. Mai 2013 22:23
  • Hallo Finius!
    Man kann von der PowerShell aus 2 Arten von PowerShell externen Programmen starten.
    1.    Windows Programme die ein Fenster erzeugen z.B Notepad.exe oder Excel.exe
    2.    Konsolen Programme wie z.B: Dos Befehle Ping.exe oder eben Disk2VHD.exe

    Die Windows Programme machen ein eigenes Fenster und einen eigenen Prozess auf (Parallel, Asynchron). Man kann dann in der PowerShell sofort weiter arbeiten. Für diese Programme ist –wait oder Wait-Prozess gedacht !

    Die Konsolen Programme benutzen den PowerShell Prozess und das PowerShell Fenster (Synchron!)! Die Ausgabe dieser Programme ist schon in PowerShell vorhanden und PowerShell "wartet" sowieso bis diese Programme fertig sind!  Deshalb ist hier die Nutzung von Start-Process und –wait Unsinn!

    Wenn du Start-Process benutzt und dann in $LastExitcode nachschaust  welchen $Lastexitcode bekommst du dann? Den von Start-Process nicht von dem Programm das Start-Process gestartet hat! Hierzu müsstes du die Ausgabe mit redirectoutput umleiten!

    Start-Process in Verbindung mit einem Konsolen Programm macht nur Sinn wenn man das Konsolen Programm in einem neuen Prozess (asynchron) starten möchte ohne die PowerShell zu blockieren!
    Da du aber –wait haben möchtest starte einfach deine Disk2VHD.exe ohne Firlefanz und all deine Wünsche sind schon erfüllt!

    Lies dir bitte dazu meinen Blog Artikel durch:
    Mehrere Arten mit der PowerShell ein externes Programm zu starten
    http://www.admin-source.de/BlogDeu/791/mehrere-arten-mit-der-powershell-ein-externes-programm-zu-starten
    Ich habe dazu auch ein Youtube Lehrvideo gemacht:
    http://www.youtube.com/watch?v=qqvfqmPGgb8

    $Sicherungspfad = "\\SERVERNAME\Freigabe$\_VHDs\"
    $Programmpfad = "C:\Disk2vhd\disk2vhd.exe" 
    $Argument1 = "*"
    $Argument2 = $Sicherungspfad + $Env:ComputerName + ".VHD"
    # Aufrufen mit Call Operator
    & $Programmpfad $Argument1 $Argument2
    
    # Testen ob disk2vhd.exe erfolgreich war
    $LASTEXITCODE


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Sonntag, 26. Mai 2013 07:05
  • Hallo Peter,

    vielen Dank für deinen Beitrag!
    Ich hatte auch deinen Aufruf zuvor bereits einmal probiert. Leider mit dem gleichen Resultat: $LASTEXITCODE ist auch im Abbruchfall leer und die Verarbeitung läuft dennoch asynchron - was falsch ist, denn das Script soll auf die Beendigung von DISK2VHD warten. Vermutlich ist DISK2VHD daher nicht als Konsolenprogramm anzusehen, da es ja auch eine GUI hat - auch wenn es von der Konsole mit Parametern aufrufbar ist. Dummerweise gibt es keinen Parameter für eine Aktivierung der Protokollierung bei DISK2VHD. Die Einträge im Ereignislog sind leider auch nicht vorhanden oder vernünftig hierzu verwendbar.
    Auch eine Umleitung mit RedirectOutput brachte leider kein Ergebnis - die Ausgabedatei bleibt leer.
    Irgendwie bin ich grade ziemlich ratlos in dieser Sache...

    Es gibt zwar die Möglichkeit die Prüfung der Rückgabecodes mit einigen manuellen Prüfungen näherungsweise zu ersetzen (etwa Laufzeitdauer-Überprüfung, Dateigrößenprüfung, Dateianzahl, etc) aber leider scheitert es am Ende damit, dass Test-VHD nicht auf Windows 2008 R2 Systemen ohne Hyper-V Rolle verfügbar ist, wodurch ich einen finalen Integritätstest nicht durchführen kann. (Die Hyper-V Rolle kann auf den betreffenden Servern auch nicht installiert werden, da die Server um die es sich handelt, bereits virtualisierte Server sind und eine Installation verbieten). Insofern ist das alles recht unbefriedigend... Trotzdem vielen Dank!

    Viele Grüße

    Sonntag, 26. Mai 2013 09:16
  • OK!

    Ich hatte Disk2VHD verwechselt.

    So bekommen ich den Exitcode und die Meldungen in der PowerShell:

    $Sicherungspfad = "\\SERVERNAME\Freigabe$\_VHDs\"
    $Programmpfad = "C:\Disk2vhd\disk2vhd.exe" 
    $Argument1 = "*"
    $Argument2 = $Sicherungspfad + $Env:ComputerName + ".VHD"
    # Aufrufen mit DOS Konsole
    cmd /c $Programmpfad $Argument1 $Argument2
    
    # Testen ob disk2vhd.exe erfolgreich war
    $LASTEXITCODE


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Sonntag, 26. Mai 2013 11:39
  • Hi,

    Vielen Dank - Hast du es eigentlich selbst einmal probiert?

    Denn ich bekomme stets einen Code "0" zurückgegeben. Egal ob die VHD-Erstellung durchläuft, der Prozess abbricht, das Netzwerk wegbricht oder wegen eines Fehlers gar nicht erst beginnt. Habe diverse Fehler simuliert und bekomme immer die 0 zurück

    Sonntag, 26. Mai 2013 14:17
  • Hi,

    Vielen Dank - Hast du es eigentlich selbst einmal probiert?

    Ja habe ich !
    Ich habe es ohne Adminrechte ausprobiert da bricht er ab Ich bekomme $Exitcode 1 zurück!

    Allerdings nutze ich nicht den * Stern sonder C: als Argument1


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Sonntag, 26. Mai 2013 18:28
  • Versuch mal folgendes:

    Benutze Disk2VHD lokal in der Doskonsole OHNE Adminrechte auf einem Vista oder Win7 mit eingeschalteter UAC.
    Ich hatte noch vergessen den /AcceptEula Parameter anzugeben, dieser muss bei Win/Sysinternal Tools angegeben werden um das Lizenzfenster zu unterdrücken!

    Wenn das UAC Fenster auftaucht drücke bitte verweigern:

    C:\Disk2vhd\disk2vhd.exe C: D:\test.vhd /accepteula
    Echo %errorlevel%

    Ich bekomme da einen Errorlevel von 5 "Zugriff verweigert" !


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Montag, 27. Mai 2013 06:48
  • Hm, ok... Danke für den Test!
    /accepteula braucht es meines Wissen aber nur beim ersten Start auf einem System - danach ist offenbar in Registry ein Wert gesetzt den sich disk2vhd bzgl. der EULA gemerkt hat.

    Aber schon lustig - wenn ich folgendes ausführe:

    $Programmpfad = "C:\Disk2vhd\disk2vhd.exe" 
    $Argument1 = "c:"
    $Argument2 = $Sicherungspfad + $Env:ComputerName + ".VHD"
    cmd /c $Programmpfad $Argument1 $Argument2
    
    $LASTEXITCODE

    und dann beim Öffnen als Nicht-Admin verweigere erhalte ich als Rückgabecode 1 - sonst 0. Und zwar egal wie das Programm beendet!!
    Sprich: Egal, ob die VHD erstellt wird, nicht erstellt wird oder das Programm wegen etwa eines Netzwerk- oder VSS Problems abbricht - es wird IMMER eine 0 zurückgegeben. Außer eben bei Fehlern, die direkt den disk2vhd-Prozess betreffen (wie etwa UAC Berechtigung verweigert, Programmpfad falsch, Syntax beim Programmaufruf fehlerhaft, etc). Aber selbst, wenn ich ein ungültiges Laufwerk an disk2vhd übergebe, ist der Rückgabecode trotzdem 0, da disk2vhd schließlich ordentlich aufgerufen und nicht unplanmäßig beendet wurde.

    Bekommst du denn einen Fehler (außer 0) wenn du etwa auf einem Netzlaufwerk/externem Laufwerk speicherst und WÄHREND der Sicherung die Verbindung zum Sicherungsziel trennst?

    Falls nein, dann scheint es für mich tatsächlich so, als wäre es nicht möglich "interne" Programmfehler bzw. Ausnahmen, die während der Laufzeit von disk2vhd auftreten, abzufragen. Würde mich für mich bedeuten, dass ich keine Möglichkeit habe, ohne das Test-VHD Kommando, sicherzustellen, dass disk2vhd die VHD eines Computers sauber und korrekt erzeugt hat. :(

    Montag, 27. Mai 2013 08:05
  • DOS Konsole NICHT PowerShell!

    C:\Disk2vhd\disk2vhd.exe C: D:\test.vhd /accepteula
    Echo %errorlevel%

    Ich bekomme da einen Errorlevel von 5 "Zugriff verweigert" !

    Die Fehlermeldung oder den Errorlevel (oder beides) kann man ja in eine Textdatei umleiten und dann mit PowerShell weiterverarbeiten!


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Montag, 27. Mai 2013 09:16
  • Ahhhhhhh - Danke für den Hinweis!! ;-)

    Also, habe es nun mal im Command Promt wie folgt ausgeführt:

    # Als Admin in einer DOS-Box ausgeführt
    #######################################
    # Aufruf eines nicht unterstützten Laufwerks e:
    C:\Windows\system32>C:\Disk2vhd\disk2vhd.exe e: c:\test\test.vhd
    C:\Windows\system32>echo %errorlevel%
    9009
    # Aufruf eines unterstützten Laufwerks b:
    C:\Windows\system32>C:\Disk2vhd\disk2vhd.exe b: c:\test\test.vhd /accepteula
    C:\Windows\system32>echo %errorlevel%
    9009
    # Aufruf eines unterstützten Laufwerks c: mit Trennung der Verbindung während der Sicherung
    C:\Windows\system32>C:\Disk2vhd\disk2vhd.exe c: \\BACKUP\Virtuell$\_VHDs\test.vhd
    C:\Windows\system32>echo %errorlevel%
    9009

    Leider ist das Ergebnis das gleiche. Diesmal bekomme ich allerdings nicht 0, sondern 9009 stets als Rückgabecode. Zwar bekomme ich auch 5 (Zugriff verweigert), wenn ich entsprechend ohne Berechtigungen arbeite, aber dies sind wie gesagt Fehlercodes die den disk2vhd-Prozess direkt betreffen. An dem Fehlercode ändert sich nichts, egal welche oder ob es Probleme beim Erstellen der VHD gibt.

    Montag, 27. Mai 2013 10:05
  • Dann musst du wohl das harte Brot essen!

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Montag, 27. Mai 2013 10:35
  • Ja, Doof...

    Habe in der letzten Stunde noch mal drüber nachgedacht - ich denke ich werde das Problem mal anders versuchen zu lösen:

    Da ich nicht bei der Erstellung kontrollieren kann, ob alles funktioniert hat, macht es vielleicht mehr Sinn auf einem Host, der Hyper-V hostet und somit den Test-VHD PS-Befehl hat, das Script laufen zu lassen, disk2vhd remote auf dem zu sichernden System anzusprechen, eine erste Kontrolle auf Laufzeit und Dateigröße durchzuführen und im Anschluss die Datei mit Test-VHD zu testen. Spätestens wenn dieser Test fehlschlägt, ist die Ausgabedatei auch defekt - letzten Endes egal, ob sie korrekt, gar nicht oder falsch erstellt wurde.

    Jetzt steh ich vor dem Problem, dass mir nicht klar ist, was ich tun muss, damit ich von einem Rechner, auf einem fremden Rechner ein Kommando ausführen kann. Geht das mit PowerShell Hausmitteln oder muss ich ein Server-Feature oder eine Software wie PSexec irgendwo installieren?


    • Bearbeitet finiusWI Montag, 27. Mai 2013 10:43
    Montag, 27. Mai 2013 10:41
  • PowerShell hat SEHR umfangreiche Remoting Möglichkeiten!
    Der Rechner der gesteuert werden soll der muss in der selben Domäne sein und muss das Remoting erlauben (Enable-PSRemoting uf dem Rechner als Admin ausführen). Voreinstellungsgemäss dürfen nur Admins Remoting machen!
    Dann ist das Cmdlet Invoke-Command deine Freund oder die *PSSession* Cmdlets

    Siehe:
    http://www.powershellpraxis.de/index.php/powershell-remote

    Da disk2VHD kein PS Cmdlet ist musst du es mit remoting auf den Zielrechener Kopieren! Eventuell ist da PSexec erstmal einfacher ;-))


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Montag, 27. Mai 2013 10:57
  • Nun habe ich ein anderes Problem - und zwar scheint es so, als würde beim Aufrufen eines Befehls auf dem anderen Rechner, die lokale Variable nicht mit übergeben:

    ...
    $Computername = $Computerliste[$i].Name
    $Programmpfad = "C:\Disk2vhd\disk2vhd.exe" 
    $VHD_Dateipfad = $Sicherungspfad + $Computername + ".VHD"
    $Argumente = "* " + $VHD_Dateipfad
    Invoke-Command -ComputerName $Computername -ScriptBlock `
    {
        Start-Process $Programmpfad -ErrorAction Continue -ArgumentList $Argumente -WindowStyle Hidden -PassThru -Wait
    } 
    ...

    Dieser Code führt bei mir dazu, dass ich folgende Fehlermeldung beim Aufruf bekomme, obwohl alle Variablen außerhalb des Invoke-Commands den korrekten Wert haben:

    Das Argument für den Parameter "FilePath" kann nicht überprüft werden. Das 
    Argument ist NULL oder leer. Geben Sie ein Argument an, das nicht NULL oder 
    leer ist, und führen Sie dann den Befehl erneut aus.
        + CategoryInfo          : InvalidData: (:) [Start-Process], ParameterBindi 
       ngValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power 
       Shell.Commands.StartProcessCommand
        + PSComputerName        : REMOTE-SERVERNAME
    Irgendwie scheint es so, dass also der Wert nicht mit in die Session übertragen wird - die Variable also remot ebeim aufruf unbekannt ist. Kann das sein? Soll das so sein?
    Dienstag, 28. Mai 2013 09:59
  • Hm, aber wenn ich die Doku richtig verstehe ist FilePath und Arguments für den Aufruf eines Powershell-Scripts auf dem anderen Host.

    Ich möchte ja hingegen das Programm disk2vhd.exe auf dem entfernten System starten

    Dienstag, 28. Mai 2013 10:28
  • 1. Der Remote-Rechner kann natürlich nicht auf die Festplatte C: des Aktuellen Rechners zugreifen. (Der Rechner der Invoke-Command startet)

    Disk2VHD MUSS auf einem Share liegen und von da aus gestartet werden oder man Kopiert Disk2VHD auf den Remote-Rechner! (Dies macht PSEXEC so)

    2.
    <<<<<Nun habe ich ein anderes Problem - und zwar scheint es so, als würde beim Aufrufen eines Befehls auf dem anderen Rechner, die lokale Variable nicht mit übergeben

    So ist es! Wenn man in der PowerShell mit einem Cmdlet arbeitet sollte man sich IMMER die sehr gute Dokumentation der Cmdlets ansehen!
    Schau dir mal bei Invoke-Command den Parameter -ArgumentList an ;-)
    Get-Help Invoke-Command -Full
    oder hier:
    http://www.colorconsole.de/PS_Windows/de/Invoke-Command.htm
    Warum du allerdings eine Fehlermeldung mit "FilePath" bekommst ist mir schleierhaft!

    Die Pfade in der ArgumentList beziehen sich natürlich auf den Remote-Rechner! (C:\ wäre dann die Platte auf dem Remote-Rechner!

    Beispiel:

    Invoke-Command -ComputerName $Computerliste[$i].Name -ScriptBlock {
        Start-Process $Args[0] -ErrorAction Continue -ArgumentList $Args[1],$Args[2] -WindowStyle Hidden -PassThru -Wait
    }  -Argumentlist "C:\Disk2vhd\disk2vhd.exe" ,"*",($Sicherungspfad + $Computerliste[$i].Name + ".VHD")


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Dienstag, 28. Mai 2013 10:55
  • So - kaum sind die einen Probleme gelöst, finden sich wieder andere:

    Beim Aufruf des folgenden Invoke-Command...

    $Programmpfad = "C:\Disk2vhd\disk2vhd.exe" 
    $Argument1 = "*"
    $Argument2 = "/accepteula" 
    $Sicherungspfad = "\\BACKUP\Virtuell$\_VHDs\"
    $Computername = "REMOTE-SERVER"
    $VHD_Dateipfad = $Sicherungspfad + $Computername + ".VHD"
    $CHKS_Dateipfad = $Sicherungspfad + $Computername + ".CHKS"
    
    Invoke-Command -ComputerName $Computername -Argumentlist $Programmpfad, $Argument1, $VHD_Dateipfad, $Argument2 -ScriptBlock `
    {
        Start-Process $Args[0] -ErrorAction Continue -ArgumentList $Args[1], $Args[2], $Args[3] -WindowStyle Hidden -PassThru | Wait-Process
    }

    ...kommt es bei den jeweiligen Remote-Systemen, außer bei einem Domänencontroller, stets zu folgendem Fehler:

    [REMOTE-SERVER] Beim Verbinden mit dem Remoteserver "REMOTE-SERVER" ist folgender Fehler 
    aufgetreten: Die Anforderung kann von WinRM nicht verarbeitet werden. Der 
    folgende Fehler ist bei Verwendung der Kerberos-Authentifizierung aufgetreten: 
    Der Computer "ANTISPAM" konnte nicht gefunden werden. Stellen Sie sicher, dass 
    der Computer im Netzwerk vorhanden ist und dass der angegebene Name richtig 
    geschrieben ist. Weitere Informationen finden Sie im Hilfethema 
    "about_Remote_Troubleshooting".
        + CategoryInfo          : OpenError: (REMOTE-SERVER:String) [], PSRemotingTrans 
       portException
        + FullyQualifiedErrorId : NetworkPathNotFound,PSSessionStateBroken
    Irgendeine Idee wieso alle Server diesen Fehler beim Remoten ausgeben, außer der Server der den Domänencontroller betreibt? Habe auf allen Servern Enable-PSRemoting ausgeführt und bestätigt.
    Wie gesagt, nur wenn der Remote-Server ein DC ist, klappt die VHD-Erstellung problemlos. Sonst bricht es nach wenigen Millisekunden ab - ein Prozess wurde aber ganz kurz erstellt.
    Mittwoch, 29. Mai 2013 21:56
  • Ich gehe davon aus das die Rechner alle sauber in derselben Domäne sind !?
    Nur Administratoren haben standardmäßig das Recht Remote zu arbeiten, ist der Account mit dem du arbeitest Administrator auf allen Rechnern?

    Ich hoffe du Arbeitetest nicht doppelt Remote, Kerberos erlaubt nämlich nicht, dass man sich Remote auf einen Rechner verbindet und dann von dort aus weiter Remote auf einen dritten Rechner geht (Second Hop, Credential delegation)! Das schließt auch den zugriff auf ein Share ein! Wenn du innerhalb des Invoke-Command (PSSession) auf ein Share zugreifen willst dann ist dies schon der verbotene Second Hop! Hier kannst du CredSSP benutzen:

    http://technet.microsoft.com/en-us/magazine/jj853299.aspx

    http://msdn.microsoft.com/en-us/library/windows/desktop/ee309365%28v=vs.85%29.aspx

    Was passiert wenn du den Vollqualifizierten Domänen Namen der Rechner Nimmst z.B. Computer.Meine.Domain.com oder die IP Adresse (auch voll qualifiziert 127.0.0.1.Meine.Domain.com).
    Wenn dies klappt hast du ein DNS Problem.

    Schau mal in das Security Event-Log ob da eventuell noch näheres zu finden ist (Stichwort WinRm ,  Kerberos).

    Zum Testen ob es an den Trusted Hosts Einstellungen liegt kannst du folgendes auf 2 Rechnern ausprobieren:
    (Nur Mitglieder der Gruppe "Administratoren" auf dem Computer verfügen über die Berechtigung zum Ändern der Liste von vertrauenswürdigen Hosts auf dem Computer.)

    Set-Item wsman:localhost\client\trustedhosts -value *


    Ansonsten hilft nur LESEN und Testen!
    http://www.colorconsole.de/PS_Windows/de/about_remote_troubleshooting.htm

    Layman’s Guide to PowerShell 2.0 Remoting
    http://www.ravichaganti.com/blog/?page_id=1301

    Administrator’s Guide to Windows PowerShell Remoting
    http://powershell.com/cs/media/p/4908.aspx

    Secrets of PowerShell Remoting
    http://powershell.org/wp/wp-content/uploads/2012/08/SecretsOfPowerShellRemoting.zip


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!




    Donnerstag, 30. Mai 2013 05:54
  • Ich gehe davon aus das die Rechner alle sauber in derselben Domäne sind !?
    Korrekt!

    Nur Administratoren haben standardmäßig das Recht Remote zu arbeiten, ist der Account mit dem du arbeitest Administrator auf allen Rechnern?
    Ja, das Script wird als Domänenadministrator ausgeführt und die Remote Session nutzt diese Rechte.

    Ich hoffe du Arbeitetest nicht doppelt Remote, Kerberos erlaubt nämlich nicht, dass man sich Remote auf einen Rechner verbindet und dann von dort aus weiter Remote auf einen dritten Rechner geht (Second Hop, Credential delegation)! Das schließt auch den zugriff auf ein Share ein! Wenn du innerhalb des Invoke-Command (PSSession) auf ein Share zugreifen willst dann ist dies schon der verbotene Second Hop! Hier kannst du CredSSP benutzen:
    http://technet.microsoft.com/en-us/magazine/jj853299.aspx

    http://msdn.microsoft.com/en-us/library/windows/desktop/ee309365%28v=vs.85%29.aspx

    Hm, interessanter Punkt. Der Script-ausführende Host, der mit disk2vhd zu sichernde Server und das Sicherungsziel der VHD sind tatsächlich immer 3 unterschiedliche Rechner in der gleichen Domäne. Aberdas gilt auch für den DC auf dem das Script läuft. Wieso sollte also ausgerechnet der DC dieses Hopping erlauben? Kann es aber gern trotzdem mal testen...

    Was passiert wenn du den Vollqualifizierten Domänen Namen der Rechner Nimmst z.B. Computer.Meine.Domain.com oder die IP Adresse (auch voll qualifiziert 127.0.0.1.Meine.Domain.com).
    Wenn dies klappt hast du ein DNS Problem.
    Leider nein - auch dies klappt nicht. Die DNS-Namen werden aber auch überall korrekt aufgelöst.

    Schau mal in das Security Event-Log ob da eventuell noch näheres zu finden ist (Stichwort WinRm ,  Kerberos).
    Mach ich nochmal - bislang fiel mir aber nichts auf...

    Zum Testen ob es an den Trusted Hosts Einstellungen liegt kannst du folgendes auf 2 Rechnern ausprobieren:
    (Nur Mitglieder der Gruppe "Administratoren" auf dem Computer verfügen über die Berechtigung zum Ändern der Liste von vertrauenswürdigen Hosts auf dem Computer.)

    Set-Item wsman:localhost\client\trustedhosts -value *

    Hatte ich auch schon probiert - Brachte leider aber auch keine Änderung

    Donnerstag, 30. Mai 2013 07:00
  • Hm, interessanter Punkt. Der Script-ausführende Host, der mit disk2vhd zu sichernde Server und das Sicherungsziel der VHD sind tatsächlich immer 3 unterschiedliche Rechner in der gleichen Domäne. Aberdas gilt auch für den DC auf dem das Script läuft. Wieso sollte also ausgerechnet der DC dieses Hopping erlauben? Kann es aber gern trotzdem mal testen...

    Ich glaube ich habe mal gelesen, das es daran liegt das der DC schon CredSSp erlaubt oder weil er das Kerberos Ticket selbst erstellt so genau weiß ich das auch nicht mehr! 


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Donnerstag, 30. Mai 2013 07:57
  • Habe mir mal die Infos zu CredSSP angesehen, aber so richtig schlau geworden bin ich nicht draus. Ich möchte ja auch die integrierte Authentifizierung des Scripts nutzen um damit sämtliche Authentifizierungen durchzuführen. Beim Aufbau der Remote Session werden also keine Anmeldeinformationen explizit übergeben.

    Ich habe mal versucht, mit den Infos auf den beiden Webseiten via Konsole auf dem zu sichernden Server (also der "mittlere Server" - dort wo der disk2vhd-Befehl ausgeführt wird) die WinRM Einstellungen entsprechend zu setzen. Ich weiß aber nicht ob es vollständig war. Wie man etwa mit SPNs umgeht, weiß ich nicht wirklich. Dann habe ich gehofft, dass ich den Rechner durch verschieben in den ActiveDirectory-Container der Domaincontrollers, mit entsprechenden Gruppenrichtlinien versorgen lassen kann. Funktionierte aber auch nicht.

    Um sicherzugehen, dass das Problem auch wirklich am Zugriff auf die Netzwerkfreigabe liegt, habe ich mal Remote eine Festplatte auf ein anderes lokales Laufwerk des Remoteservers gesichert. Dies klappte problemlos. Sobald der Pfad für die VHD wieder ins Netzwerk gelegt wurde, schlug es fehl. Es muss also irgendwie damit zusammen hängen - aber ich bekomme nicht hin, was ich dazu ändern muss. Irgendeine Idee?

    Freitag, 31. Mai 2013 07:38
  • Ich habe CredSSp noch nie benutzt aber ich verstehe das so, das dort EXPLIZIT die Credentials angegeben werden müssen.
    Man kann Ceredentials ja auch abspeichern und wieder einlesen.
    Dies kann aber nur der User der die Creds auch abgespeichert hat UND es muss auf dem selben Rechner geschehen!
    http://www.gamorz.de/blog/2012/12/11/powershell-login-informationen-verschlusselt-speichern/

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Freitag, 31. Mai 2013 07:50
  • Hallo,

    wenn man mit dem Parameter -key bei convertfrom-/convertto-securestring arbeitet, kann man schon auf dem Rechner A als User 1 die Cred's fuer User 2 speichern, und diese dann in einem Script verwenden, was zb.: auf Rechner B von einem User 3 verwendet wird.

    Beste Gruesse
    brima
    Freitag, 31. Mai 2013 09:24
  • Hallo,

    wenn man mit dem Parameter -key bei convertfrom-/convertto-securestring arbeitet, kann man schon auf dem Rechner A als User 1 die Cred's fuer User 2 speichern, und diese dann in einem Script verwenden, was zb.: auf Rechner B von einem User 3 verwendet wird.

    Beste Gruesse
    brima


    Hallo brima,

    es sollen keine zwei User-Daten verwendet werden: Als Domänenadmin läuft auf Domänenrechner 1 ein Script an, dass über eine Remote-Session zu Domänenrechner B dort einen Befehl ausführt, der wiederum ein Programm auf Rechner B startet, welches ein Backup auf einem Domänenrechner C speichert.

    Alles soll unter denselben Credentials laufen... Aber offenbar macht WinRM da nicht mit, denn diese Vorgehensweise funktioniert ausschließlich wenn Rechner B ein Domänencontroller ist. Ich lese gerade, dass man wohl offenbar irgendwelche SPNs braucht - auch wenn ich den Sinn und Zweck von CredSSP noch immer nicht verstehe. Ich hoffe noch, dass ich einfach eine Policy aktivieren kann, mit dem dieses Multi-Hop bei Verwendung der integrierten Authentifizierung aktiviert werden kann... Tappe aber hier noch völlig im Dunkeln.

    VG


    PS: Ich werde das hier mal testen: http://www.ravichaganti.com/blog/?p=1230
    • Bearbeitet finiusWI Freitag, 31. Mai 2013 09:53
    Freitag, 31. Mai 2013 09:33
  • Hallo finiusWI,

    ist schon klar, ich wollte nur anmerken das es moeglich ist, weil Peters Post andeutet, das es nicht gehen wuerde.

    Beste Gruesse
    brima

    Freitag, 31. Mai 2013 10:13
  • Hallo finiusWI,

    ist schon klar, ich wollte nur anmerken das es moeglich ist, weil Peters Post andeutet, das es nicht gehen wuerde.

    Beste Gruesse
    brima


    Hm, ok. In welchem Zusammenhang sollte ich denn convertfrom-/convertto-securestring nutzen? Hast du ein Beispiel wie sich das in einen Aufruf von Invoke-Command einfügen würde?
    Freitag, 31. Mai 2013 10:17
  • Interessante Erkenntnis: An Server C (dem Sicherungsziel) meldet sich nicht der Domänenadministrator oder Server A (also, der der das Script hostet und ausführt) an, sondern Server B (auf dem disk2vhd von Server A remote ausführt wird). Die Authentifizierung schlägt aber nicht fehl, da das Computerkonto Server B bereits volle Berechtigung auf das Sicherungsziel auf Server C besitzt. Dennoch funktioniert die Sicherung dorthin nicht. Es scheint also kein Authentifizierungsproblem, sondern irgendein Delegationsproblem zu sein... wo auch immer, denn meine GPO Anpassung funktionierte nicht.

    Habe mir aber nochmal die explizierte Einstellung der Delegierung in den AD-Computerobjekten der drei Server angesehen und mit dem DC verglichen. Nachdem ich Server B und C diese Einstellung gegeben habe läuft der Befehl nun durch. Mal sehen, ob er auch auf den anderen Servern läuft, aber im Moment sieht's gut aus... Läuft zwar auf Server C nun unter dem Kontext des Computerkonto - ist für mich aber OK...

    Bin mal gespannt, ob es diese Einstellung war:

    • Bearbeitet finiusWI Freitag, 31. Mai 2013 11:09
    Freitag, 31. Mai 2013 10:52
  • CredSSp hat natürlich was mit Kerberos Delegation zu tun. Ich kenne mich da nicht aus! Aber dies ist sehr Interessant:
    http://serverfault.com/questions/277573/cannot-get-credssp-authentication-to-work-in-powershell

    Vielleicht Hilft es ?


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Freitag, 31. Mai 2013 11:41
  • Hm, ok. In welchem Zusammenhang sollte ich denn convertfrom-/convertto-securestring nutzen? Hast du ein Beispiel wie sich das in einen Aufruf von Invoke-Command einfügen würde?

    Also, Du hast irgendwo ein Script laufen, in dem es einen Befehl gibt, der Credentials braucht, die nicht die sind, mit denen das Script laueft, also z.B.: ein Invoke-Command -ComputerName Server1 -Credential $Cred {....}. Das Script laueft z.B als User B, fuer den invoke-command, werden aber die Userrechte von UserA aus der Domain XYZ benoetigt und dessen Credentials sollen nicht eingeben werden, sondern das Script soll diese sozusagen selbstaendig ermitteln.

    Dazu muss man einmalig die Credentials fuer den User z.B: auf einem NetzwerkShare unter einem unverdaechtigeren Namen hinterlegen, wie hier im Beispiel

    $pw = Read-Host "Kennwort" -AsSecureString
    $key = 1..32 | ForEach-Object {Get-Random -Maximum 256}
    $key -join ' ' | Out-File .\securePassword.txt
    ConvertFrom-SecureString $pw -key $key | Out-File -Append .\securePassword.txt
    [byte[]][char[]]"XYZ\UserA" -join "-" | Out-File -Append .\securePassword.txt

    In der Datei befinden sich jetzt sowohl, der Hash des Kennwortes, der Key und auch der User.
    Das Script das nun die Credentials diesen Users braucht kann sich das Credential Objekt auf diesem Weg wieder zusammen bauen.

    $data = Get-Content .\securePassword.txt
    $key = $data[0] -split ' '
    $SecureIn = ConvertTo-SecureString $data[1] -Key $key
    $data[2] = ($data[2] = $data[2] -split "-" | ForEach-Object {[char]([byte]$_)}) -join ""
    $Cred = New-Object System.Management.Automation.PSCredential $data[2], $SecureIn

    Natuerlich stellt die Datei securePassword.txt ein SicherheitsRisiko da, weil z.B.: ueber die Marshall Funktion das Passwort im Klartext ermittelt werden kann usw.

    Es besteht aber natuerlich auch die Moeglichkeit das ganze auch noch mehr zu verschleiern, sprich die Daten in einer groesseren Datei zu verstecken, ein Teil des Keys und oder Kennwortes in den Scripten zu berechnen usw.

    Beste Gruesse
    brima

        
    Freitag, 31. Mai 2013 13:23