none
STOP-VM RRS feed

  • Frage

  • Hi

    als alter Batch Hase und Powershell Newbie möchte ich gerne zu bestimmten Zeiten die VM's starten, exportieren und beenden. Unter Server 2008R2 habe ich dies mit den HyperV CMDLets und dem Script http://www.hyper-v-server.de/tools/hyper-v-sicherung-mittels-powershell-script/ gemacht.

    Unter Server 2012 möchte ich das mal "selber" scripten und frage mich warum ein simples "stop-vm server" auf der Powershellkonsole die VM runterfährt aber als PS1 Script an der Console gestartet die Meldung ausgibt das die VM schon diesen Status hat ein dahinterliegendes "get-VM | ft name,state" liefert mir die den Status Running zurück.

    Ich mache was falsch aber was?

    Grüße


    • Bearbeitet Volker Frank Donnerstag, 20. September 2012 21:11
    Donnerstag, 20. September 2012 21:11

Antworten

  • Ich kann das hier nicht testen.Wenn keine verwertbare Fehlermeldung kommt,wirst du nicht um schrittweises Troubleshooting rumkommen.

    Da deine Theorie ja ist, das sich der Stop-VM-Befehl aus irgendwelchen Gründen im Script anders verhält als im ISE/der Konsole, würde ich mal Schritt für Schritt vorgehen:

    Nimm ein einfaches stop-vm/get-vm und führe das in der Konsole aus. Wenns geht, dann pack das in ein Script und führe das wieder aus, wenn das auch klappt starte das ganze über die Aufgabenplanung. Falls bis dahin alles geht, ergänze dein Script weiter in Richtung obiges Script und teste wieder. Irgendwo wird sich dann zum ersten mal der Fehler zeigen und vielleicht hast du dann ja auch mal ne Fehlermeldung die die Ursachensuche für uns erleichtert.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Montag, 24. September 2012 14:13
    Moderator

Alle Antworten

  • Der Befehl sollte (insofern es da keinen Bug gibt) im Script exakt die gleiche Wirkung haben, wie auf der Konsole. Poste bitte mal genau den Befehl den du auf der Konsole eingibst (bitte keine Änderungen abgesehen vom Servernamen), sowie das Script was du benutzt.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Donnerstag, 20. September 2012 23:29
    Moderator
  • Hi

    ich verwende folgendes Script:

    # Allgemeine Variablen 
    # Name der Virtuellen Maschine
    $VM="Server"
    
    # Datensicherungslaufwerk
    $LW="e:"
    
    Set-Variable -Name tmp -Value “$(get-date -f o ) Start Datensicherung”
    $stat=$tmp
    
    Set-Variable -Name tmp -Value “$(get-date -f o ) Stoppe VM”
    $stat=$stat+"`r`n"+$tmp
    Stop-VM -Name $VM -outvariable tmp
    $stat=$stat+"`r`n"+$tmp
    get-vm $VM | fl name,state > c:\scripts\temp.txt
    get-content "c:\scripts\temp.txt" -OutVariable tmp
    $stat=$stat+"`r`n"+$tmp
    
    Set-Variable -Name tmp -Value “$(get-date -f o ) Bereinige Backupziel”
    $stat=$stat+"`r`n"+$tmp
    rd $LW\$VM -force -recurse -outvariable tmp
    $stat=$stat+"`r`n"+$tmp
    
    Set-Variable -Name tmp -Value “$(get-date -f o ) Exportiere VM”
    $stat=$stat+"`r`n"+$tmp
    Export-VM -Name $VM -Path $LW -outvariable tmp
    $stat=$stat+"`r`n"+$tmp
    
    Set-Variable -Name tmp -Value “$(get-date -f o ) Starte VM”
    $stat=$stat+"`r`n"+$tmp
    start-VM -Name $VM -outvariable tmp
    $stat=$stat+"`r`n"+$tmp
    get-vm $VM | fl name,state > c:\scripts\temp.txt
    get-content "c:\scripts\temp.txt" -OutVariable tmp
    $stat=$stat+"`r`n"+$tmp
    
    Set-Variable -Name tmp -Value “$(get-date -f o ) Ende Datensicherung”
    $stat=$stat+"`r`n"+$tmp
    
    #Eventuell warten Bis der Server wieder an ist
    start-sleep -s 900
    
    Send-MailMessage -from XX@XXX.de -to XX@XXX.de -SmtpServer 192.168.XX.XX -Subject "Datensicherung" -Body $stat

    Das geht im ISE (Server 2012) ohne Probleme aber sobal ich eine PS1 Datei draus mache und die mittels Aufgabenplanung einbinde nicht mehr.

    Grüße



    • Bearbeitet Volker Frank Samstag, 22. September 2012 15:24 Maildaten und IP maskiert
    Samstag, 22. September 2012 15:20
  • Wahrscheinlich musst du noch ein Snap-In bzw. ein Modul laden welches dir diese Cmdlets wie z.B Stop-VM zur Verfügung stellt (am Anfang des Skripts). Ich meinte gelesen zu haben, dass die Konsole bzw. der Editor auf zwei unterschiedliche Ordner zugreifen für Snap-Ins / Module, bin mir da aber nicht ganz sicher ...

    Was ist denn genau die Fehlermeldung? Das er mit dem Cmdlet "Stop-VM" nichts anfangen kann?


    Regards / Freundliche Grüsse King Julien



    • Bearbeitet King Julien Montag, 24. September 2012 08:27
    Montag, 24. September 2012 08:26
  • Hi,

    ich verstehe nicht was du meinst. Wenn ich an der Powershell stehe kann ich von jedem Dateisystempunkt aus diese CMDLets ausführen.

    Eine fehlermeldung bekomme ich nicht, das ganze wird schlicht nicht ausgeführt.

    Volker

    Montag, 24. September 2012 11:49
  • Ich kann das hier nicht testen.Wenn keine verwertbare Fehlermeldung kommt,wirst du nicht um schrittweises Troubleshooting rumkommen.

    Da deine Theorie ja ist, das sich der Stop-VM-Befehl aus irgendwelchen Gründen im Script anders verhält als im ISE/der Konsole, würde ich mal Schritt für Schritt vorgehen:

    Nimm ein einfaches stop-vm/get-vm und führe das in der Konsole aus. Wenns geht, dann pack das in ein Script und führe das wieder aus, wenn das auch klappt starte das ganze über die Aufgabenplanung. Falls bis dahin alles geht, ergänze dein Script weiter in Richtung obiges Script und teste wieder. Irgendwo wird sich dann zum ersten mal der Fehler zeigen und vielleicht hast du dann ja auch mal ne Fehlermeldung die die Ursachensuche für uns erleichtert.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Montag, 24. September 2012 14:13
    Moderator
  • Hi Denniver,

    selbst die aufgaben Logs und Tasks waren CLEAN!!! Nix rein garnichts, dann habe ich aber mal die ExecutionPolicy mir angesehen die war noch undefined. Diese habe ich auch unrestricted gesetzt und die Maschine mal neugestartet, siehe da es läuft. Was mich zu der Frage bringt warumhier kein EIntrag im Ereignisslog kommt wenn ich ein unsigniertes Script ausführe und dieses aufgrund der ExecutionPolicy nicht komplett ausgeführt wird. Na Ja wieder was dazugelernt.

    Grüße

    Volker

    Dienstag, 25. September 2012 06:23
  • PowerShell ExecutionPolicy richtig verstehen! ;-))http://www.admin-source.de/BlogDeu/401/powershell-executionpolicy-richtig-verstehen-2

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    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' '

    Dienstag, 25. September 2012 07:22
  • Ein Fehler wäre gekommen wenn du -wie du am Anfang behauptet hast- das Script wirklich von einer Konsole oder dem ISE aus gestartet hättest.

    Auch wird ein Script nicht nur "nicht komplett" ausgeführt, wenn die Executionpolicy nicht richtig gesetzt ist, sonder gar nicht.
    Die Policy kann auch nicht der Grund dafür sein, das das "PS1 Script an der Console gestartet die Meldung ausgibt das die VM schon diesen Status hat".

     

    Wie auch immer die Policy gesetzt war, sie war definitiv nicht der Grund für die von dir beschriebenen Probleme. :)

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Dienstag, 25. September 2012 11:45
    Moderator
  • Hallo Denniver

    mag sein das es verschiedene Fehler gab (so interpretiere ich deine Aussage zumindest), hab ja gesagt - Powershell Newbie. Du sahst ja auch das zwischen STOP-VM und meinem Scriptpost einiges passiert war, aber so ist das halt mit der Kapselung von Problemen.

    @Alex Bitte schließe doch den Thread Ziel erreicht - dank eurer Mithilfe

    Grüße

    Volker

    Dienstag, 25. September 2012 12:16
  • Lieber Volker, die Antwort in einem Thread, kann nur eine Antwort auf eine gestellte Frage sein. Auch wenn diese lautet: wir haben die Antwort in diesem Thread nicht gefunden. Du hast hier verschiedene Fragen gestellt, diese dann offenbar zwischenzeitlich gelöst und zu Schluss behauptet die Policy war dran schuld. Dies ist nicht richtig und daher nicht die Antwort.

    Du kannst gerne nochmal beschreiben wie du die im Ursprungspost gestellten Fragen gelöst hast, dann markiere ich dies als Antwort. Ansonsten bleibt es so wie es zuvor war. Und wenn du möchtest sperre ich dann auch den Thread. :)


    Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Dienstag, 25. September 2012 12:27
    Moderator
  • Ich mag nicht in Haarkleinstem ausführen, warum es nicht geklappt hat, denn ich weiß es nicht - ich bin ja ein Newbie. Nach Post des vollständigen Scriptes ist und war (weil reproduzierbar) die Policy der Grund.

    Wenn dies gegen die Regeln dieses Forums verstösst das ausschließlich die intitialgestellte Frage die Basis für eine Antwort darstellen kann, dann ist das so und ich füge mich selbstverständlich dem.

    Grüße

    Volker

    Dienstag, 25. September 2012 12:38
  • Ich erklärs mal:

    Der Grund für die Existenz der Antwortmarkierung ist neben den Punkten (die du übrigens in deinem eigenen Thread niemals bekommen kannst) hauptsächlich, daß spätere Leser schneller die endgültige Antwort auf eine Frage finden, ohne alle Posts lesen- und den gesamten Antwortfindungsprozess nachvollziehen zu müssen.

    Deshalb ist beispielsweise als Standardansicht für alle Neue und nicht-angemeldete Forumsbenutzer eingestellt, das in einem Thread direkt unter dem ersten Post (der Frage) sofort die als Antwort markierten Posts angezeigt werden.

    In diesem Fall also dein Post mit der Frage warum "Stop-VM" in der Konsole ein anderes Verhalten, sogar eine andere Ausgabe zeigt als im Script. Darunter würde dann deine Antwort erscheinen "es lag an der Policy". Das wäre falsch.

    Es ist in diesem Fall in der Tat etwas tricky die am ehesten passende Antwort zu markieren, daher mein Vorschlag deine Schritte zur Problembehebung zu posten.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 25. September 2012 12:51
    Moderator
  • Deshalb sagte ich ja füge mich selbstverständlich dem.

    Grüße

    Volker

    Dienstag, 25. September 2012 12:53
  • Ja und ich wollte, das du dich nicht nur "fügst", sondern auch verstehst warum. :-)

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 25. September 2012 12:58
    Moderator