Avatar billede DonDaase Novice
29. juni 2016 - 10:46 Der er 4 kommentarer

Shutdown script til Windows 10

Hej.

Jeg har for nyligt opdateret til Windows 10 hvilket jeg er godt tilfreds med.

Det eneste der driller mig er et shutdown script jeg selv har lavet i AutoIt3. Scriptet kalder jeg i Group Policy.  Scriptet er en slags komme/gå der kalder en macro i en bestemt excel fil. Macroen stempler bare shutdown tiden ned i arket. Den del virker fint. Problemet opstår hvis tiden er < 16:00. Der popper en promt op hvor jeg indtaster noget tekst.

I windows 7 virkede prompten fint og den pausede windows shutdown indtil jeg havde sluttet scriptet. Men i 10eren viser den shutdown billedet med det samme og jeg tror faktisk at den pauser. Men jeg kan bare ikke bruge prompten.

Kan noget hjælpe mig med scriptet eller alternativt give mig en bedre måde at gøre det på. Jeg vil gerne have at det selve windows shutdownen der trigger scriptet. Jeg vil ikke have et script der trigger shutdownen

AI3 kode:

#include <Excel.au3>
#include <MsgBoxConstants.au3>

Local $oExcel = _Excel_Open(True)
If @error Then Exit MsgBox(16, "Excel UDF: _Excel_BookOpen Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)

Local $sWorkbook = "C:\Users\jmoe\Documents\timer\timer.xls"
Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)
$oExcel.run("Jmoe_Slutte_Dag")
Sleep(5000)
Exit


Macro:

Sub Jmoe_Slutte_Dag()

Dim Undskyldning As String
Dim Overtid As Variant

'Hvis sidste indtastede celle i kolonne B er dags dato => Skriv tid i kolonne 2 til højre(hvis tom); Ellers Exit
Range("B11").End(xlDown).Select
  If ActiveCell.Value = Date Then
    ActiveCell.Offset(0, 2).Select
    If ActiveCell.Value > 0 Then
      Application.OnTime Now, "SaveExit"
    Else
      ActiveCell.Value = Time
      ActiveCell.Offset(0, 1).Select
      If ActiveCell.Value < 0# Then
        Undskyldning = InputBox("Indsæt undskyldning." & vbCrLf & vbCrLf & "Indsæt 'ti' for tælles ikke og derefter indtaste forventet diff tid", "UNDSKYLDNING")
        ActiveCell.Offset(0, 3).Select
        ActiveCell.Value = Undskyldning
          If ActiveCell.Value = "ti" Then
            Overtid = InputBox("Indsæt forventet over/undertid [t]", "Timer")
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = Overtid
          End If
      End If
    End If
  Else
    Application.OnTime Now, "SaveExit"
  End If

Application.OnTime Now, "SaveExit"
End Sub
Avatar billede Mikkel Clement Seniormester
11. juli 2016 - 12:02 #1
Hej DonDasse,

Du skriver at du ikke vil have scriptet trigger windows shutdown, hvilket betyder at du er afhængig af Windows håndtering af shutdown procedurer. Jeg kunne forestille mig at Windows når at lukke nogle services, som dit script/macro er afhængig af og derfor vil promptet ikke virke.

Jeg mener man kan skifte mellem synkron og asynkron afvikling af scripts i en GPO, så antaget at Windows når at læse GPO'en før den lukker for mange services, så burde en GPO med synkron script afvikling kunne sikre at promptet virker. Man kan også slå til om scriptet skal være synligt under afvikling, det kunne også være en mulighed.

Windows er blevet mere og mere asynkron med tiden, så jeg er ikke sikker på at din fremgangsmåde hvor du blokerer shutdown proceduren vil virke på sigt, selv om du får det til at virke nu.

Mvh Mikkel
http://lighthousetech.dk
Avatar billede DonDaase Novice
12. juli 2016 - 21:28 #2
Hej Mikkel.

Jeg kan ikke finde noget info omkring synkron afvikling i en GPO. Kan du uddybe?

//Jan
Avatar billede Mikkel Clement Seniormester
12. juli 2016 - 23:04 #3
Du kan læse afsnittet "User Logoff/Computer Shutdown" fra dette link, han forklarer det meget fornuftigt:
https://blogs.technet.microsoft.com/askds/2010/03/23/group-policy-script-processing-behavior/

Men som sagt tidligere, selv om du får det til at virke med at pause shutdown processen, så er det en funktionalitet, som Windows bevæger sig væk fra. Så hvis du skal fremtidssikre dit script, så ville jeg nok ændre det til at et klik på shutdown knappen i windows ikke starter en shutdown, men i stedet kører dit script, som derefter udløser et shutdown event i Windows.

Tjek evt. max ventetid på loggoff scripts er sat til et fornuftigt tidsinterval: https://technet.microsoft.com/en-us/library/cc940027.aspx

Mvh Mikkel
http://lighthousetech.dk
Avatar billede Mikkel Clement Seniormester
15. juli 2016 - 11:31 #4
Fandt du en løsning DonDasse, ellers må du sige til :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester