none
shutdown & Stop-Computer / PowerShell RRS feed

  • Frage

  • Hallo liebes TechNet Forum.

    Zur Zeit bin ich noch Schüler und unsere Aufgabe ist es uns eine individiuelle Batchdatei zu schreiben, sie zu dokumentieren und vorzutragen. Anschließend sollen wir diese Batchdatei in Powershell umfunktionieren. Allerdings hat unser Lehrer selbst nicht so die Ahnung und deshalb wende ich mich mal an Erfahrene. Mir persönlich ist der Umgang mit PowerShell neu aber ich lerne gerne und schnell dazu.

    Ich habe mir eine Sleep-Timer Batchdatei erstellt, bei der gefragt wird, wann der PC heruntergefahren werden soll. Da die Konsole nur Sekundenangaben annimmt, habe ich noch eine Zeitumwandlung mit eingebaut, die mir Sekunden in Minuten umrechnet.

    Alles funktioniert auch prima, nur leider weiß ich nicht wie ich diesen Schritt in der PowerShell anwenden kann.

    Wenn ich mir die Parameter von "Stop-Computer" anschaue, finde ich keine Möglichkeit diese per Zeit zu steuern...

    Meine zweite Idee war, den Befehl "Stop-Computer" einfach in der angegebenen Zeit ausführen zu lassen nur finde ich diese etwas Blöde... (:

    Ich habe auch viel bei google gesucht nur leider nichts brauchbares gefunden, es wird lediglich immer wieder auf die Batch zurückgewiesen.

    Vllt habt Ihr ja eine Lösung das wäre Super! Danke schon mal !

    Hier ist meine Batchdatei:

    _______________________________________________________________________________________________

    @echo off
    color 0A

    :start
    echo.
    echo.
    echo.
    echo =============================================================
    echo In wie vielen Minuten soll Ihr Computer heruntergefahren werden?
    echo =============================================================
    set /p min=Zeit in Minuten:
    if not defined min (
      echo.
      echo Bitte geben Sie etwas ein...
      echo.
      goto start
    )

    set /a test = %min%*1

    if %test% LEQ 0 (
      if %min% == a (
        goto cancel
      )
      echo.
      echo Zu kurz! Bitte eine längere Zeit eingeben:
      echo.
      goto start
    )

    set /a zeit = %min%*60
    echo Shutdown in %min% Minuten
    pause
    shutdown.exe -s -t %zeit% -f


    :cancel
    cls
    echo.
    echo.
    echo.
    echo =============================================================
    echo Möchten Sie den Sleep-Countdown abbrechen?
    echo =============================================================
    set /p antwort= (j/n)?:
    If "%antwort%" == "j" (CALL :abbrechen) Else (
    If "%antwort%" == "n" (CALL :exit) Else (
    goto :cancel
    )
    )

    :abbrechen
    cls
    echo.
    echo.
    echo.
    echo =============================================================
    echo Das Herunterfahren des Systems wird abgebrochen!
    shutdown -a
    echo Möchten Sie das Programm wiederholen?
    echo =============================================================
    set /p ok= (j/n)?:
    echo.
    If /i "%ok%" == "j" (CALL :start) ELSE (
    If /i "%ok%" == "n" (CALL :exit2) ELSE (
    cls
    echo.
    echo.
    echo.
    echo =============================================================
    echo Falsche Eingabe! Bitte "j" oder "n" eingeben!
    echo =============================================================
    echo.
    goto :abbrechen
    )
    )

    :exit
    cls
    echo.
    echo.
    echo.
    echo =============================================================
    echo Ihr System wird zur gewünschten Zeit heruntergefahren.
    echo Der SleepTimer wird nun beendet...
    echo =============================================================
    echo.
    pause
    exit

    :exit2
    cls
    echo.
    echo.
    echo.
    echo =============================================================
    echo Der SleepTimer wird nun beendet...
    echo =============================================================
    echo.
    pause
    exit
    ______________________________________________________________________________________________

    Montag, 7. November 2016 14:36

Antworten

  • Für was genau steht das -wait ?

    Wenn ich "start-process notepad" eingebe passiert das selbe wie mit "start-process notepad -wait"

    Wait steht für warten... nur auf was ist die Frage^^ ???

    Hallo,

    Start-process notepad; Write-Host 'TEXT TEXT'

    NotePad wird geöffnent und der Text erscheint.

    Wenn Du nun bei Start-Process den Parameter -wait hinzufügst wird erstmal nur Notepad geöffnent, von dem Text siehst du nichts, der erscheint erst wenn Du Notepad beendeest. daraus folgt, dass -Wait auf Beendigung des Processes wartet.

    Die Powershell bietet auch eine Hifel an:

    Get-Help Start-Process -Parameter Wait

    Beste Gruesse
    brima

    Dienstag, 8. November 2016 12:17
  • Ich habe versucht die Sekunden in Minuten umzurechnen allerdings kriege ich es nicht hin... er übernimmt die *60 nicht und bricht dann einfach ab... Ich habe auch versucht eine zweite Variable zu setzen mit einem festen Wert 60 allerdings sollte dies ja kein Unterschied machen...

    zB.

    $Zeiteingabe = Read-Host In wievielen Minuten soll Ihr Computer heruntergefahren werden?

    If ($Zeiteingabe -gt "0") {
    write-host Ihr Computer wird in $Zeiteingabe Minuten heruntergefahren.
    start-process shutdown.exe -ArgumentList "/s -t $Zeiteingabe*60"}

    Wenn du mit Zahlen rechnen willst, dann musst du Powershell (und anderen Programmiersprachen auch) sagen, das es sich um eine Zahl handelt.

    $zahl = 0 # ich bin eine Zahl (keine Anführungsstriche)
    $zahl.GetType().Name
    
    $text = "0" # ich bin ein Text (Anführungsstriche)
    $text.GetType().Name
    

    In deinem Code sollte das dann so aussehen:

    [int]$Zeiteingabe = Read-Host In wievielen Minuten soll Ihr Computer heruntergefahren werden?
    
    If ($Zeiteingabe -gt 0) {
        write-host Ihr Computer wird in $Zeiteingabe Minuten heruntergefahren.
        start-process shutdown.exe -ArgumentList "/s -t $($Zeiteingabe*60)"
    }

    Dienstag, 8. November 2016 09:54

Alle Antworten

  • Genau, Stop-Computer hat leider kein eingebauten Countdown.

    Ich würde an der Stelle auf "shutdown.exe" ausweichen.

    $zeit = 120 # Zeit in Sekunden
    Start-Process shutdown.exe -ArgumentList "/s -t $zeit"

    Montag, 7. November 2016 14:52
  • Hmmmm .... na wenn schon Powershell, dann aber doch wenigstens mit Powershell-cmdlets, oder?  ;-)

    Start-Sleep -Seconds ....
    Stop-Computer 


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 7. November 2016 14:59
  • > Wenn ich mir die Parameter von "Stop-Computer" anschaue, finde ich keine
    > Möglichkeit diese per Zeit zu steuern...
     
    Start-Wait schon angeschaut? :) Könntest sogar mit Write-Progress
    kombinieren, dann sieht's schöner aus...
     
     
    Montag, 7. November 2016 14:59
  • > Start-Wait schon angeschaut?

    Gibts nen neues CMDlet was ich nicht kenne? :)  Oder meinst du "start-process -wait"?

    > Meine zweite Idee war, den Befehl "Stop-Computer" einfach in der angegebenen Zeit ausführen zu lassen nur finde ich diese etwas Blöde... (:

    Das wäre aber der richtige Weg. :) 

    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Montag, 7. November 2016 15:43
    Moderator
  • Start-Sleep tut mir leider nur die PowerShell-Aktivitäten einfrieren
    Montag, 7. November 2016 19:44
  • Für was genau steht das -wait ?

    Wenn ich "start-process notepad" eingebe passiert das selbe wie mit "start-process notepad -wait"

    Wait steht für warten... nur auf was ist die Frage^^ ???

    Montag, 7. November 2016 19:46
  • Ich habe versucht die Sekunden in Minuten umzurechnen allerdings kriege ich es nicht hin... er übernimmt die *60 nicht und bricht dann einfach ab... Ich habe auch versucht eine zweite Variable zu setzen mit einem festen Wert 60 allerdings sollte dies ja kein Unterschied machen...

    zB.

    $Zeiteingabe = Read-Host In wievielen Minuten soll Ihr Computer heruntergefahren werden?

    If ($Zeiteingabe -gt "0") {
    write-host Ihr Computer wird in $Zeiteingabe Minuten heruntergefahren.
    start-process shutdown.exe -ArgumentList "/s -t $Zeiteingabe*60"}

    Montag, 7. November 2016 19:50
  • Naja .... und danach wird der PC heruntergefahren. Das war doch die Quintessenz Deiner Stapelverarbeitungsdatei, oder? Du kannst natürlich auch noch ein fancy Menü drumherum bauen und den AW drei mal fragen, ob er sich sicher ist ...  ;-)

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 7. November 2016 19:54
  • Ich habe versucht die Sekunden in Minuten umzurechnen allerdings kriege ich es nicht hin... er übernimmt die *60 nicht und bricht dann einfach ab... Ich habe auch versucht eine zweite Variable zu setzen mit einem festen Wert 60 allerdings sollte dies ja kein Unterschied machen...

    zB.

    $Zeiteingabe = Read-Host In wievielen Minuten soll Ihr Computer heruntergefahren werden?

    If ($Zeiteingabe -gt "0") {
    write-host Ihr Computer wird in $Zeiteingabe Minuten heruntergefahren.
    start-process shutdown.exe -ArgumentList "/s -t $Zeiteingabe*60"}

    Wenn du mit Zahlen rechnen willst, dann musst du Powershell (und anderen Programmiersprachen auch) sagen, das es sich um eine Zahl handelt.

    $zahl = 0 # ich bin eine Zahl (keine Anführungsstriche)
    $zahl.GetType().Name
    
    $text = "0" # ich bin ein Text (Anführungsstriche)
    $text.GetType().Name
    

    In deinem Code sollte das dann so aussehen:

    [int]$Zeiteingabe = Read-Host In wievielen Minuten soll Ihr Computer heruntergefahren werden?
    
    If ($Zeiteingabe -gt 0) {
        write-host Ihr Computer wird in $Zeiteingabe Minuten heruntergefahren.
        start-process shutdown.exe -ArgumentList "/s -t $($Zeiteingabe*60)"
    }

    Dienstag, 8. November 2016 09:54
  • > /> Start-Wait schon angeschaut? /
    >
    > Gibts nen neues CMDlet was ich nicht kenne? :)  Oder meinst du
    > "start-process -wait"?
     
    Äh - Start-Sleep war gemeint :))
     
    Dienstag, 8. November 2016 10:50
  • > Wait steht für warten... nur auf was ist die Frage^^ ???
     
    Mea culpa...
     
    $time = 10
    $step = 1
     
    for ( $i=0; $i -lt $time; $i+=$step) {
      Write-Progress -Status "Sleeping $( $time - $i ) seconds..."
    -Activity "Sleeping..." -PercentComplete ( $i / $time * 100 )
      Start-Sleep $step
      }
     
    Dienstag, 8. November 2016 11:01
  • Für was genau steht das -wait ?

    Wenn ich "start-process notepad" eingebe passiert das selbe wie mit "start-process notepad -wait"

    Wait steht für warten... nur auf was ist die Frage^^ ???

    Hallo,

    Start-process notepad; Write-Host 'TEXT TEXT'

    NotePad wird geöffnent und der Text erscheint.

    Wenn Du nun bei Start-Process den Parameter -wait hinzufügst wird erstmal nur Notepad geöffnent, von dem Text siehst du nichts, der erscheint erst wenn Du Notepad beendeest. daraus folgt, dass -Wait auf Beendigung des Processes wartet.

    Die Powershell bietet auch eine Hifel an:

    Get-Help Start-Process -Parameter Wait

    Beste Gruesse
    brima

    Dienstag, 8. November 2016 12:17
  • Ja du hast Recht ...  mein Fehler war das der automatisch nach string schaut ... nachdem ich intager eingefügt habe ging es aus :) DANKE!

    Ich habe meinen Code allerdings jetzt so geschrieben und das geht auch...

     start-process shutdown.exe -ArgumentList "/s -t $Zeiteingabe*60"

    Macht das jetzt einen großen Unterschied? Oder könnte man es theoretisch auch so dabei belassen?

    Mittwoch, 9. November 2016 07:32
  • Danke jetzt hats klick gemacht (:
    Mittwoch, 9. November 2016 07:35