Newsgroup: it.comp.reti.locali
Titolo: NUOVO help per il shutdown automatico

Salve ragazzi grazie per l'aiuto sia per chi mi ha ispirato per un
Sleep (per far eseguire un shutdown automatico dopo un certo tempo
determinato) oppure per un net time. ma io ho risolto nel seguento
modo..
ho scaricato un speciale shutdown.exe che con il seguente comando
(shutdown  /restar /t:50) esegue un speciale contdown per 50 minuti e
dopo di che si disconette o a seconda l'amministratore sceglie puo far
chiudere il pc o riavviare. per non far killare il contdown esiste il
comando /nocancel che in questo modo non si puo chiudere il conto alla
rovescia. Per far partire tutto cio ho creato un Script in VBS (
Windows Script Host) che ve lo scrive nelle seguenti righe.
**********************************************************************************************************
minTest = false
niTest = false
bTest  = false
bAdmin = false
lgTest = false
dvdTest= false
sPath  = "\\serversgiovanni\Utenti\LogUtenti\"
sFileName  = "\\serversgiovanni\Utenti\LogUtenti\LogInternet.log"
sFileName2 = "\\serversgiovanni\Utenti\LogUtenti\LogInternetData.log"
sFileName3 = "\\serversgiovanni\Utenti\LogUtenti\CodiciNI.txt"
sFileName4 = "\\serversgiovanni\Utenti\LogUtenti\Minori.txt"
strComputer = "UT202"
Dim OrarioConn, DataCorr, MinCorr, OraCorr, ProxOra, CountDown
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer
& "\root\cimv2")
Set colComputer = objWMIService.ExecQuery ("Select * from
Win32_ComputerSystem")
For Each objComputer in colComputer
    sUserName = Replace(UCase(objComputer.UserName), "\", "/")
Next
Set objFileSO = CreateObject("Scripting.FileSystemObject")
Set WSHShell = Wscript.CreateObject("Wscript.Shell")
DataCorr = Date()
OrarioConn = Time()
OraCorr = Hour(OrarioConn)
MinCorr = Minute(OrarioConn)
ProxOra = Hour(OrarioConn) + 1
'controlla i gruppi associati all'utente
Set User = GetObject("WinNT://" & sUserName & ",user")
For each Group in User.Groups
    'Wscript.Echo Group.name
    If Group.name = "Administrators" Then
       bAdmin = true
    End If
Next
If Not bAdmin Then
   If MinCorr >= 55 AND MinCorr <= 59 Then
      strTitle = "     ATTENZIONE"
      strText = "POSTAZIONE  UTILIZZABILE DALLE ORE " & ProxOra & ".00
"
      intButton = WSHShell.Popup(strText, 15, strTitle, 0)
      WSHshell.run "C:\LogUtenti\LogOffUser.exe"
   End If
   Set objFileSO = CreateObject("Scripting.FileSystemObject")
   Set WSHShell = Wscript.CreateObject("Wscript.Shell")
   If Not objFileSO.FileExists(sFileName) Then
      objFileSO.CreateTextFile sFileName, true
   End If
   If Not objFileSO.FileExists(sFileName2) Then
      objFileSO.CreateTextFile sFileName2, true
   End If
   ' controlla se l'utente non è abilitato a navigare in internet
   Set f = objFileSO.GetFile(sFileName3)
   Set cni = f.OpenAsTextStream
   While cni.AtEndOfStream <> True AND Not niTest
      CodUt = cni.ReadLine
      CodNI = "SGIOVANNI/" & CodUt
      If CodNI = sUserName Then
	 niTest = true
    	 strTitle = "     ATTENZIONE"
         strText = "NON SEI ABILITATO A NAVIGARE IN INTERNET  "
         intButton = WSHShell.Popup(strText, 15, strTitle, 0)
         WSHshell.run "LogOffUser.exe"
      End If
   WEnd
   cni.Close
   ' controlla se l'utente è minorenne
   Set m = objFileSO.GetFile(sFileName4)
   Set min = m.OpenAsTextStream
   While min.AtEndOfStream <> True AND Not minTest
      CodMin = "SGIOVANNI/" & min.ReadLine
      ' Wscript.Echo CodMin
      If CodMin = sUserName Then
         minTest = true
    	 strTitle = "     ATTENZIONE"
         strText = "ESSENDO MINORENNE NON SEI ABILITATO AD USARE QUESTA
POSTAZIONE  "
         intButton = WSHShell.Popup(strText, 15, strTitle, 0)
         WSHshell.run "LogOffUser.exe"
      End If
   WEnd
   min.Close
   ' controlla se l'utente ha già navigato
   Set lf = objFileSO.GetFile(sFileName)
   Set lfu = lf.OpenAsTextStream
   While lfu.AtEndOfStream <> True AND Not lgTest
      CodLog = lfu.ReadLine
      If CodLog = sUserName Then
	 lgTest = true
    	 strTitle = "     ATTENZIONE"
         strText = "ACCESSO NEGATO. OGGI HAI GIA' UTILIZZATO UNA
POSTAZIONE DA 55 MINUTI  "
         intButton = WSHShell.Popup(strText, 15, strTitle, 0)
         WSHshell.run "LogOffUser.exe"
      End If
   WEnd
   lfu.Close
   'in tutti gli altri casi
   If Not lgTest Then
      CountDown = 55 - MinCorr
      strTitle = "     TEMPO DI UTILIZZO"
      strText = "MINUTI A DISPOSIZIONE PER NAVIGARE IN INTERNET: " &
CountDown & "  "
      intButton = WSHShell.Popup(strText, 15, strTitle, 0)
      WshShell.Run "C:\LogUtenti\ShutDown /RESTART /T:" & CountDown & "
/NOLOGO /NOCANCEL /FORCE"
      'scrive l'utente nel file di controllo dei log (se non è PM0000)
      If sUserName <> "SGIOVANNI/PM0000" Then
         Set objFileTS = objFileSO.OpenTextFile(sFileName, 8, true)
         objFileTS.Write(sUserName & vbNewLine)
         objFileTS.Close
      End If
      'Scrive l'utente nel file per le statistiche
      Set objFileTS2 = objFileSO.OpenTextFile(sFileName2, 8, true)
      sUserName2 = sUserName & ";" & strComputer & ";" & DataCorr & ";"
& OrarioConn
      objFileTS2.Write(sUserName2 & vbNewLine)
      objFileTS2.Close
   End If
End if
--------------------------------- ED UNO PER NAVIGAZIONE DA 15 MIMUTI
-------------------------------
lgTest = false
niTest = false
bTest  = false
bAdmin = false
minTest = false
chiusura = false
sPath  = "\\serversgiovanni\Utenti\LogUtenti\"
sFileName  = "\\serversgiovanni\Utenti\LogUtenti\LogBreve.log"
sFileName2 = "\\serversgiovanni\Utenti\LogUtenti\LogBreveData.log"
sFileName3 = "\\serversgiovanni\Utenti\LogUtenti\CodiciNI.txt"
sFileName4 = "\\serversgiovanni\Utenti\LogUtenti\Minori.txt"
strComputer = "UT019"
Dim OrarioConn, DataCorr, GiornoSett, MinCorr, OraCorr, ProxOra,
CountDown
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer
& "\root\cimv2")
Set colComputer = objWMIService.ExecQuery ("Select * from
Win32_ComputerSystem")
For Each objComputer in colComputer
    sUserName = Replace(UCase(objComputer.UserName), "\", "/")
Next
DataCorr = Date()
GiornoSett = WeekDay(DataCorr)
OrarioConn = Time()
OraCorr = Hour(OrarioConn)
MinCorr = Minute(OrarioConn)
'controlla i gruppi associati all'utente
Set User = GetObject("WinNT://" & sUserName & ",user")
For each Group in User.Groups
    'Wscript.Echo Group.name
    If Group.name = "Administrators" Then
       bAdmin = true
    End If
Next
If Not bAdmin Then
   Set objFileSO = CreateObject("Scripting.FileSystemObject")
   Set WSHShell = Wscript.CreateObject("Wscript.Shell")
   If Not objFileSO.FileExists(sFileName) Then
      objFileSO.CreateTextFile sFileName, true
   End If
   If Not objFileSO.FileExists(sFileName2) Then
      objFileSO.CreateTextFile sFileName2, true
   End If
   ' impedisce di utilizzare la postazione a 5 minuti dalla chiusura
della biblioteca
   If GiornoSett = 5 Then
      If OraCorr = 19 And MinCorr >= 55 Then
	 chiusura = true
      End If
   ElseIf OraCorr = 12 Or OraCorr = 19 Then
      If MinCorr >= 55 Then
	 chiusura = true
      Else chiusura = false
      End If
   Else chiusura = false
   End If
   If chiusura Then
      strTitle = "     ATTENZIONE"
      strText = "POSTAZIONE NON UTILIZZABILE PERCHE' PROSSIMI ALLA
CHIUSURA  "
      intButton = WSHShell.Popup(strText, 15, strTitle, 0)
      ' WSHshell.run "C:\LogUtenti\LogOffUser.exe"
   End If
   ' controlla se l'utente non è abilitato a navigare in internet
   Set f = objFileSO.GetFile(sFileName3)
   Set cni = f.OpenAsTextStream
   While cni.AtEndOfStream <> True AND Not niTest
      CodUt = cni.ReadLine
      CodNI = "SGIOVANNI/" & CodUt
      If CodNI = sUserName Then
	 niTest = true
    	 strTitle = "     ATTENZIONE"
         strText = "NON SEI ABILITATO A NAVIGARE IN INTERNET  "
         intButton = WSHShell.Popup(strText, 15, strTitle, 0)
         WSHshell.run "LogOffUser.exe"
      End If
   WEnd
   cni.Close
   ' controlla se l'utente è minorenne
   Set m = objFileSO.GetFile(sFileName4)
   Set min = m.OpenAsTextStream
   While min.AtEndOfStream <> True AND Not minTest
      CodMin = "SGIOVANNI/" & min.ReadLine
      ' Wscript.Echo CodMin
      If CodMin = sUserName Then
         minTest = true
    	 strTitle = "     ATTENZIONE"
         strText = "ESSENDO MINORENNE NON SEI ABILITATO AD USARE QUESTA
POSTAZIONE  "
         intButton = WSHShell.Popup(strText, 15, strTitle, 0)
         WSHshell.run "LogOffUser.exe"
      End If
   WEnd
   min.Close
   ' controlla se l'utente ha già navigato nella giornata corrente
   Set lf = objFileSO.GetFile(sFileName)
   Set lfu = lf.OpenAsTextStream
   While lfu.AtEndOfStream <> True AND Not lgTest
      CodLog = lfu.ReadLine
      If CodLog = sUserName Then
	 lgTest = true
    	 strTitle = "     ATTENZIONE"
         strText = "LA NAVIGAZIONE BREVE PUO' ESSERE EFFETTUATA SOLO
UNA VOLTA AL GIORNO  "
         intButton = WSHShell.Popup(strText, 15, strTitle, 0)
         WSHshell.run "LogOffUser.exe"
      End If
   WEnd
   lfu.Close
   If Not lgTest Then
      If GiornoSett = 5 Then
         If OraCorr = 19 And MinCorr > 40 Then
	    CountDown = 55 - MinCorr
         Else CountDown = 15
         End If
      ElseIf OraCorr = 12 Or OraCorr = 19 Then
         If MinCorr > 40 Then
	    CountDown = 55 - MinCorr
         Else CountDown = 15
         End If
      Else CountDown = 15
      End If
      strTitle = "     TEMPO DI UTILIZZO"
      strText = "MINUTI A DISPOSIZIONE PER NAVIGARE IN INTERNET: " &
CountDown & "  "
      intButton = WSHShell.Popup(strText, 15, strTitle, 0)
      ' WshShell.Run "C:\LogUtenti\ShutDown /RESTART /T:15 /NOLOGO
/NOCANCEL /FORCE"
      WshShell.Run "C:\LogUtenti\ShutDown /RESTART /T:" & CountDown & "
/NOLOGO /NOCANCEL /FORCE"
      'scrive l'utente nel file di controllo dei log (se non è PM0000)
      If sUserName <> "SGIOVANNI/PM0000" Then
         Set objFileTS = objFileSO.OpenTextFile(sFileName, 8, true)
         objFileTS.Write(sUserName & vbNewLine)
         objFileTS.Close
      End If
      'Scrive l'utente nel file per le statistiche
      Set objFileTS2 = objFileSO.OpenTextFile(sFileName2, 8, true)
      sUserName2 = sUserName & ";" & strComputer & ";" & Day(Now) & "/"
& Month(Now()) & "/" & Year(Now) &";" & Time()
      objFileTS2.Write(sUserName2 & vbNewLine)
      objFileTS2.Close
   End If
End if
**********************************************************************************************************
Ecco in questo modo ho risolto il mio problema per il shutdown. Però
voi vi chiederete perche mai allora ho postato il seguente POST? i
motivi sono 2.
1 perche ho piacere di condividere e rolovere i problemi
dell'informatiche nelle mie possibilità.
2 heheh...   perche ho trovato una zona vulneravile nel script.
ecco.... bhe la zona vulnerabile e che.. se l'utente apre un qualsiasi
file di testo e basta che scrive qualche carattere una volta finito il
shutdown appagliono le seguenti finestre. una e la scelta se l'utente
vuole salvare il file oppure no, se l'utente non sceglie entro un lasso
di tempo di 10 15 sec. appare la finestra del task di terminare
l'operazione. Allora un utente inesperto basta che salva il file o no
il script puo continuare ad eutoeseguirsi. altrimenti se l'utente
aspetta lo scoccare i 01 minuti dopo la seguente ora ( esempio se sono
le 15:50 ed il task non si termina prima le 16.01 ) l'utente puo
continuare la navigazione.
Ora la domanda e la seguente :- qualcuno riesce ad modificare
rispettando l'originale script in modo che possa terminare
automaticamente il task? per poi far finire ad eseguire il script?
GRAZIE.

 GRAZIE.
Ciao,
non posso aituarti con lo script, ma la prima cosa che mi è venuta in
mente è modificare quel tempo di attesa.
Se segui la guida su questo link
http://www.johntp.com/2006/02/14/speed-up-windows-xp-shutdown/
  se non
sbaglio ti spiega come accorciare quel tempo di attesa. lo metti per
esempio ad 1s, e Windows in 1 secondo ti killa l'applicazione senza che
l'utente finale risponda si/no/annulla.
spero di esserti stato d'aiuto.
Ciao,
Marco

ti ringrazio....