pfeffis 11 Geschrieben 22. März 2009 Melden Teilen Geschrieben 22. März 2009 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. Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 22. März 2009 Melden Teilen Geschrieben 22. März 2009 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 Zitieren Link zu diesem Kommentar
XP-Fan 217 Geschrieben 23. März 2009 Melden Teilen Geschrieben 23. März 2009 Hi pfeffis, wie sieht denn deine Textdatei aus in welcher die PC gelistet sind ? Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 23. März 2009 Autor Melden Teilen Geschrieben 23. März 2009 In der txt sind alle Client Namen untereinander aufgelistet. PC1 PC2 PC3 etc. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 23. März 2009 Melden Teilen Geschrieben 23. März 2009 Wie wäre es mit Powershell. Da geht solch ein Script ganz schnell. Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 23. März 2009 Autor Melden Teilen Geschrieben 23. März 2009 Habe ich auch nichts dagegen, nur habe ich von der Powershell keine bis gar keine Ahnung :( Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 23. März 2009 Melden Teilen Geschrieben 23. März 2009 Dürfte es auch vbs sein? Gruß Dirk Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 23. März 2009 Autor Melden Teilen Geschrieben 23. März 2009 wäre mir letztendlich alles recht - was letzendlich bei der batch falsch läuft weiß ich dann aber trotzdem nicht :confused: Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 23. März 2009 Melden Teilen Geschrieben 23. März 2009 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%) Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 23. März 2009 Melden Teilen Geschrieben 23. März 2009 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 Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 23. März 2009 Autor Melden Teilen Geschrieben 23. März 2009 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 Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 23. März 2009 Melden Teilen Geschrieben 23. März 2009 Was kommt denn für ein Fehler? Bei mir läuft das einwandfrei(W2K)... Gruß Dirk Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 23. März 2009 Autor Melden Teilen Geschrieben 23. März 2009 Läuft auch unter W2k3. Lof File sieht gut aus, nur runterfahren lässt sich keiner :( Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 23. März 2009 Melden Teilen Geschrieben 23. März 2009 Hallo, du hast aber diesen Teil oShell.run "shutdown \\" & srechner &" /R /t:60 """& sText &""" /C" schon an deine Bedürfnisse angepasst? in etwa so.. oShell.run "shutdown -r -f -m \\" & srechner &" -t 300 -c """& sText &"""" Gruß Dirk Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 23. März 2009 Autor Melden Teilen Geschrieben 23. März 2009 Au weh - Asche auf mein Haupt :rolleyes: Vielen Dank - funktioniert prima. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.