PsTools (psloggedon) in eine Batchdatei einpflegen
Hi,
Ich suche eine Möglichkeit, um eine Gruppe von PCs automatisch herunterzufahren und sie wieder am nächsten Tag hochfahren. Das Ganze soll aber passieren, nur wenn KEIN User angemeldet ist. Also..ich habe nachgeforscht , nach einem passenden Tool, etc., das das Überprüfen, ob j-d noch am PC angemeldet ist, übernimmt und das System entsprechend runterfährt oder nicht.
Ich habe sehr oft auf "pstools" von Microsotf (Tools hat Firma Winternals geschrieben, aber Microsoft hat die dann gekauft;)) gestoßen und auf meinem Rechner installiert. Die Tools sind auf microsoft-seite zum Herunterladen und das Paket enthält mehrere Tools wie:
So....ich habe psloggedon auf EINEM PC ausprobiert, es hat hervorragend funktioniert, d.h. ich bakam folgende Ausgabe:
Jetz wollte ich natürlich nicht nur EINEN Comp auswerten, sondern alle. Dazu habe ich eine Liste mit Computernamen erstellt und sie zusammen mit Batch-Dateien in einen Ordner gepackt.
[die Aufruf-Batchdatei sieht folgend aus:
"logg.bat" enthält:
Das Problem ist: wenn ich das Tool "psloggedon" durch meine Batchdateien aufrufe bekomme ich folgende Ausgabe:
Als ob der Script auf diese PC nicht zugreifen könnte....oder sind die Befehle in Batchdateien falsch???
Falls jemand Fehler sieht, schreibt mir bitte zurück!! Wäre nett ;)
Thx,
Schöne Grüsse
Ich suche eine Möglichkeit, um eine Gruppe von PCs automatisch herunterzufahren und sie wieder am nächsten Tag hochfahren. Das Ganze soll aber passieren, nur wenn KEIN User angemeldet ist. Also..ich habe nachgeforscht , nach einem passenden Tool, etc., das das Überprüfen, ob j-d noch am PC angemeldet ist, übernimmt und das System entsprechend runterfährt oder nicht.
Ich habe sehr oft auf "pstools" von Microsotf (Tools hat Firma Winternals geschrieben, aber Microsoft hat die dann gekauft;)) gestoßen und auf meinem Rechner installiert. Die Tools sind auf microsoft-seite zum Herunterladen und das Paket enthält mehrere Tools wie:
- psloggedon = zeigt, wer in einem System angemeldet ist....
- psshutdown = fährt das System automatisch runter (gibt’s mehrere Optionen dazu)
So....ich habe psloggedon auf EINEM PC ausprobiert, es hat hervorragend funktioniert, d.h. ich bakam folgende Ausgabe:
Y:\admin\scripts\ordnername>psloggedon -l -x \\ pcname1 [= cmd-Eingabe]
loggedon v1.33 - See who's logged on
Copyright ® 2000-2006 Mark Russinovich
Sysinternals - www.sysinternals.com
Users logged on locally:
NT-AUTORIT?T\LOKALER DIENST
NT-AUTORIT?T\NETZWERKDIENST
DOMÄNEname\user1 ----------------------> hier steht der Username
NT-AUTORIT?T\SYSTEM
Jetz wollte ich natürlich nicht nur EINEN Comp auswerten, sondern alle. Dazu habe ich eine Liste mit Computernamen erstellt und sie zusammen mit Batch-Dateien in einen Ordner gepackt.
[die Aufruf-Batchdatei sieht folgend aus:
echo off
del rechner-psloggedon.txt
for /f "delims=" %%i in ('type "rechner-list.txt"') do call "logg.bat" "%%i" >> rechner-psloggedon.txt
echo off
psloggedon -l -x
goto :EOF
Das Problem ist: wenn ich das Tool "psloggedon" durch meine Batchdateien aufrufe bekomme ich folgende Ausgabe:
Users logged on locally:
NT-AUTORITÄT\LOKALER DIENST
NT-AUTORITÄT\NETZWERKDIENST
DOMÄNEname\meinName -----------> ich war überhaupt dort nicht eingeloggt !!
DOMÄNEname\meinAdminName -----------> wie oben
NT-AUTORITÄT\SYSTEM
Users logged on locally:
NT-AUTORITÄT\LOKALER DIENST
NT-AUTORITÄT\NETZWERKDIENST
DOMÄNEname\meinName -----------> wie oben
DOMÄNEname\meinAdminName -----------> wie oben
NT-AUTORITÄT\SYSTEM
Als ob der Script auf diese PC nicht zugreifen könnte....oder sind die Befehle in Batchdateien falsch???
Falls jemand Fehler sieht, schreibt mir bitte zurück!! Wäre nett ;)
Thx,
Schöne Grüsse
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62373
Url: https://administrator.de/contentid/62373
Ausgedruckt am: 23.11.2024 um 11:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo FARYS!
Wenn Deine Batch-Datei wie beschrieben aussieht, ist das Ergebnis leicht zu erklären: Du übergibst zwar den Rechnernamen an das Unterprogramm (das, ganz nebenbei, nicht in einer eigenen Datei stehen muss bzw gar nicht nötig wäre), verwendest diesen aber dort nicht - die entscheidende Befehlszeile im Unterprogramm müsste lauten:
Es sollte aber auch etwa so genügen:
Etwas besser zu verwenden werden die Ergebnisse, wenn Du Unnötiges ausfilterst, zB mit
Grüße
bastla
Wenn Deine Batch-Datei wie beschrieben aussieht, ist das Ergebnis leicht zu erklären: Du übergibst zwar den Rechnernamen an das Unterprogramm (das, ganz nebenbei, nicht in einer eigenen Datei stehen muss bzw gar nicht nötig wäre), verwendest diesen aber dort nicht - die entscheidende Befehlszeile im Unterprogramm müsste lauten:
psloggedon -l -x \\%~1
del rechner-psloggedon.txt
for /f "delims=" %%i in ('type "rechner-list.txt"') do psloggedon -l -x \\%%i >> rechner-psloggedon.txt
for /f "delims=" %%i in ('type "rechner-list.txt"') do psloggedon -l -x \\%%i|findstr /v "NT-AUTOR logged">> rechner-psloggedon.txt
Grüße
bastla
Hallo FARYS!
Der folgende Entwurf beinhaltet eine Kombination aus "Erstellung der Rechnerliste" und "Durchführen des Herunterfahrens", wobei anzumerken wäre, dass die Liste in diesem Fall eigentlich gar nicht benötigt würde, sondern anstelle des Eintragens in die Liste (nach "if not defined LoggedOn") auch gleich der "Shutdown"-Befehl stehen könnte ...
Das Herunterfahren wird durch die Ausgabe von "Shutdown \\Rechnername" nur simuliert - wenn alles klappt, anstelle des "echo Shutdown \\%%r" den eigentlichen Befehl (ob per "PsShutDown" oder per "shutdown.exe") platzieren.
Anmerkung: Du hast bis jetzt die Betriebssystemversion des Rechners, auf dem der Batch laufen soll, nicht genannt. Sollte es sich um W2000 handeln, müsste die Überprüfung der Erreichbarkeit eines Rechners über "ping" anders erfolgen, da der Errorlevel von W2000 nicht richtig gesetzt wird.
Grüße
bastla
Der folgende Entwurf beinhaltet eine Kombination aus "Erstellung der Rechnerliste" und "Durchführen des Herunterfahrens", wobei anzumerken wäre, dass die Liste in diesem Fall eigentlich gar nicht benötigt würde, sondern anstelle des Eintragens in die Liste (nach "if not defined LoggedOn") auch gleich der "Shutdown"-Befehl stehen könnte ...
@echo off & setlocal
set "RechnerList=D:\Rechner-List.txt"
set "ShutDownList=D:\Rechner-PsSLoggedOn.txt"
if exist "%ShutDownList%" del "%ShutDownList%"
for /f "delims=" %%i in ('type "%RechnerList%"') do call :ProcessComp "%%i"
goto :ShutEmDown
:ProcessComp
ping %~1>nul || goto :eof
set LoggedOn=
for /f "delims=" %%u in ('psloggedon -l -x \\%~1^|findstr /v "NT-AUTOR logged"') do set LoggedOn=%%u
if not defined LoggedOn echo %~1>>"%ShutDownList%"
goto :eof
:ShutEmDown
if exist "%ShutDownList%" for /f "usebackq delims=" %%r in ("%ShutDownList%") do echo Shutdown \\%%r
Anmerkung: Du hast bis jetzt die Betriebssystemversion des Rechners, auf dem der Batch laufen soll, nicht genannt. Sollte es sich um W2000 handeln, müsste die Überprüfung der Erreichbarkeit eines Rechners über "ping" anders erfolgen, da der Errorlevel von W2000 nicht richtig gesetzt wird.
Grüße
bastla