Jump to content

shutdown.exe logfile stimmt nicht


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo!

 

folgendes kleines batch file läuft bei uns um alle rechner in pc.txt runter zu fahren. Schlagt mich bitte nicht, anscheinend sehe ich den Wald vor lauter Bäumen nicht :(

 

set rechner=pc.txt

set logfile=\\server\shutdown$\Protokoll\Meldung-vom-%date%.log

echo. > %logfile%

for /f %%i in (%rechner%) do (ping -n 1 %%i) && if errorlevel=0 (shutdown -r -f -m \\%%i -t 300 -c "Ihr PC wird in 5 Minuten herunter gefahren. 
Speichern Sie daher Ihre Arbeit und beenden alle Programme.") && echo PC %%i war noch eingeschaltet um %time% >>%logfile%

 

Leider schreibt er mir in das logfile alle PCs, sprich auch die welche nicht runtergefahren werden mussten, da sie aus waren. Ich denke mal dass dieser Fehler an dieser Zeile liegt:

 

&& echo PC %%i war noch eingeschaltet um %time% >>%logfile%

 

nur weiß ich nicht so recht wie das ohne && zu lösen ist.

Link zu diesem Kommentar

Hallo pfeffis,

 

ich muss gestehen, das ich nicht so der Batch König bin...

 

mir ist aber beim Blick auf den Code was aufgefallen...

 

Evtl. stimmt was mit deinem Errorlevel nicht...

 

Hast du dir die Rückgabewerte mal angesehen?

 

echo Errorlevel ist: [%errorlevel%]

 

Wenn ich dem hier:

Batch-Infos

 

Glauben schenke, müsste auch das IF über sein, da du eine bedingte Befehlsverkettung einsetzt.

 

Vielleicht hilft es auch wenn du das ganze ein wenig mehr strukturierst. Ein Goto könnte da gute Dienste leisten.

 

 

Gruß

 

Dirk

Link zu diesem Kommentar

Ungetestet:

SetLocal EnableDelayedExpansion
set rechner=pc.txt

set logfile=\\server\shutdown$\Protokoll\Meldung-vom-%date%.log

echo. > %logfile%

for /f %%i in (%rechner%) do (
ping -n 1 %%i
if !errorlevel! == 0 (shutdown -r -f -m \\%%i -t 300 -c "Ihr PC wird in 5 Minuten herunter gefahren. 
Speichern Sie daher Ihre Arbeit und beenden alle Programme.") 
&& echo PC %%i war noch eingeschaltet um %time% >>%logfile%)

Link zu diesem Kommentar

Halo pfeffis,

 

hier mal ein vbs Schnippselchen. Hat ein wenig länger gedauert. Ist jetzt momentan auch nur W2K kompatibel, da ich nichts anderes da hab. Müsstest also den Shutdown an deine Bedürfnisse anpassen...

 

fclients = "pc.txt"
flogfile = "\\server\Freigabe$\"& Year(Now) & Month(Now) & Day(Now)&"_shutdown.log"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = WScript.CreateObject("WScript.Shell")
fclients = oFSO.GetFolder(".")& "\" & fclients
 If Not oFSO.FileExists(flogfile) Then 
  Set ologfile = oFSO.CreateTextfile(flogfile, true)
 Else
  Set ologfile = oFSO.OpenTextFile(flogfile, 8)
 End If
 Set clientread = oFSO.OpenTextFile(fclients)
 oLogfile.WriteLine("Start " & Now() & "")
 Do Until clientread.AtEndOfStream
   srechner = clientread.ReadLine
   If Ping(srechner) Then
   sText = "Ihr PC wird in 1 Minute herunter gefahren. Speichern Sie Ihre Arbeit und beenden alle Programme."
   oShell.run "shutdown \\" & srechner &" /R /t:60 """& sText &""" /C"
 ologfile.WriteLine("PC "& srechner &" war noch eingeschaltet um "& Time() &"")
   End If
 Loop
 ologfile.close

Function Ping(sMachine)
Set WshShell = WScript.CreateObject("WScript.Shell")  
Ping = 0
MyCmd = "ping.exe " & sMachine
Err.Clear
Set oExec = WshShell.Exec(MyCmd)
Do While oExec.Status = 0
Loop
Do Until oExec.StdOut.AtEndOfStream 
	sLine = oExec.StdOut.ReadLine
	If InStr(sLine, "Reply from ") > 0  OR InStr(sLine, "Antwort von ") > 0 Then
		Ping = -1
		Exit Do
	End If
Loop	
Set oExec = Nothing
Set WshShell = Nothing
End Function 

 

Gruß

 

Dirk

Link zu diesem Kommentar

Vielen Dank erstmal. Ab hier macht er noch zicken:

 

Set oExec = WshShell.Exec(MyCmd)
Do While oExec.Status = 0
Loop
Do Until oExec.StdOut.AtEndOfStream 
	sLine = oExec.StdOut.ReadLine
	If InStr(sLine, "Reply from ") > 0  OR InStr(sLine, "Antwort von ") > 0 Then
		Ping = -1
		Exit Do
	End If
Loop	
Set oExec = Nothing
Set WshShell = Nothing
End Function

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...