Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PsTools (psloggedon) in eine Batchdatei einpflegen

Frage Entwicklung Batch & Shell

Mitglied: FARYS

FARYS (Level 1) - Jetzt verbinden

26.06.2007, aktualisiert 18.07.2007, 9316 Aufrufe, 13 Kommentare

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:
  • 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:
01.
Y:\admin\scripts\ordnername>psloggedon -l -x \\ pcname1  [= cmd-Eingabe] 
02.
 
03.
loggedon v1.33 - See who's logged on 
04.
Copyright ® 2000-2006 Mark Russinovich 
05.
Sysinternals - www.sysinternals.com 
06.
 
07.
Users logged on locally: 
08.
     NT-AUTORIT?T\LOKALER DIENST 
09.
     NT-AUTORIT?T\NETZWERKDIENST 
10.
     DOMÄNEname\user1                     ----------------------> hier steht der Username 
11.
     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:
01.
echo off 
02.
 
03.
del rechner-psloggedon.txt 
04.
for /f "delims=" %%i in ('type "rechner-list.txt"') do call "logg.bat" "%%i" >> rechner-psloggedon.txt
"logg.bat" enthält:
01.
echo off 
02.
 
03.
psloggedon -l -x  
04.
 
05.
 
06.
goto :EOF

Das Problem ist: wenn ich das Tool "psloggedon" durch meine Batchdateien aufrufe bekomme ich folgende Ausgabe:
01.
Users logged on locally: 
02.
     NT-AUTORITÄT\LOKALER DIENST 
03.
     NT-AUTORITÄT\NETZWERKDIENST 
04.
     DOMÄNEname\meinName                          -----------> ich war überhaupt dort nicht eingeloggt !! 
05.
     DOMÄNEname\meinAdminName                ----------->  wie oben  
06.
     NT-AUTORITÄT\SYSTEM 
07.
 
08.
Users logged on locally: 
09.
     NT-AUTORITÄT\LOKALER DIENST 
10.
     NT-AUTORITÄT\NETZWERKDIENST 
11.
     DOMÄNEname\meinName                          -----------> wie oben 
12.
     DOMÄNEname\meinAdminName                ----------->  wie oben  
13.
     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
Mitglied: bastla
26.06.2007 um 15:45 Uhr
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:
01.
psloggedon -l -x \\%~1
Es sollte aber auch etwa so genügen:
01.
del rechner-psloggedon.txt 
02.
for /f "delims=" %%i in ('type "rechner-list.txt"') do psloggedon -l -x \\%%i >> rechner-psloggedon.txt
Etwas besser zu verwenden werden die Ergebnisse, wenn Du Unnötiges ausfilterst, zB mit
01.
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
Bitte warten ..
Mitglied: FARYS
26.06.2007 um 15:57 Uhr
hallo bastla!

danke schön für deine Antwort!! Es hat funktioniert!!
Ich bastle dann weiter, um meine Ergebnisse zu bekommen.

Übrigens: ich habe überhaupt keine Erfahrung mti Batchdeteien, das war so zusagen mein Debiut ;)..deswegen diese Fehler.

Grüsse
FARYS
Bitte warten ..
Mitglied: FARYS
27.06.2007 um 13:50 Uhr
so....das Ganze ist für mich komplizierter als ich dachte ;)
Vielleicht könntets Du (@bastla) oder j-d anders mir weiter helfen..

Jetzt wollte ich weiter in dieser Batchdatei (oder wenn es nötig in einer neuen) eine Abfrage durchführen, um aus der zweiten txt-datei ("rechner-psloggedon.txt") nur diese Werte (PCs) rausfiltern, wo NIEMAND eingeloggt ist und dann mit "psshutdown" diese Rechner herunterzufahren.
Ich vermute, es geht mit "if Errorlevel"-Abfrage, aber wie gesagt, da ich kein Programmierer bin, scheint das Ganze für mich zu verwirrend sein...;).

Wie sollte ich jetzt meine Befehle formulieren?

Und...ist es möglich, dass die Rechnernamen immer behalten werden?, d.h. ob sie in der "rechner-psloggedon.txt"-Datei neben den Ergebnissen (wer da eingeloggt ist) gezeigt werden? zurzeit werden die Rechnernamen gelöscht und nur die Ergebnisse gezeigt.

Danke für die Antworten!

Grüsse
farys
Bitte warten ..
Mitglied: bastla
27.06.2007 um 14:36 Uhr
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 ...
01.
@echo off & setlocal 
02.
set "RechnerList=D:\Rechner-List.txt" 
03.
set "ShutDownList=D:\Rechner-PsSLoggedOn.txt" 
04.
if exist "%ShutDownList%" del "%ShutDownList%" 
05.
for /f "delims=" %%i in ('type "%RechnerList%"') do call :ProcessComp "%%i" 
06.
goto :ShutEmDown 
07.
:ProcessComp 
08.
ping %~1>nul || goto :eof 
09.
set LoggedOn= 
10.
for /f "delims=" %%u in ('psloggedon -l -x \\%~1^|findstr /v "NT-AUTOR logged"') do set LoggedOn=%%u 
11.
if not defined LoggedOn echo %~1>>"%ShutDownList%" 
12.
goto :eof 
13.
:ShutEmDown 
14.
if exist "%ShutDownList%" for /f "usebackq delims=" %%r in ("%ShutDownList%") do echo Shutdown \\%%r
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
Bitte warten ..
Mitglied: FARYS
02.07.2007 um 10:25 Uhr
hallo,

ich habe Deine Befehle wie sie oben stehen eingepflegt und diese Batchdatei ausgeführt (anstatt "echo shutdown \\%%r" habe ich psshutdown hinzugefügt). Leider bekomme ich überhaupt keine Ausgabe, oder besser gesagt die Befehle werden nicht ausgeführt = nachdem ich meine Batchdatei aufrufe, bekomme ich immer die Meldung:
"Das Gerät ist nicht bereit".

In welchem Zusammenhang könnte das auftreten? Hast Du schon mal was Ähnliches gehabt?
Sollte ich irgendwelche Freigaben auf den Remoterechnern einschalten?

Schöne Grüsse
FARYS
Bitte warten ..
Mitglied: bastla
02.07.2007 um 13:52 Uhr
Hallo FARYS!

Ändere bitte einmal in der ersten Zeile das "@echo off" auf "@echo on" und führe den Batch von der Kommandozeile aus - dadurch kannst Du mitverfolgen, an welcher Stelle genau der Fehler auftritt.

Grüße
bastla
Bitte warten ..
Mitglied: FARYS
02.07.2007 um 15:09 Uhr
hi bastla!

Der Fehler tritt nach der Zeile:

for /f "delims=" %%i in ('type "%RechnerList%"') do call :ProcessComp "%%i"
Das Gerät ist nicht bereit.

..also als ob er den Befehl ":ProcessComp" nicht ausführen wollte.

Oder?
Bitte warten ..
Mitglied: bastla
02.07.2007 um 15:17 Uhr
Hallo FARYS!

Sehen wir uns zur Sicherheit die %RechnerList% an - füge dazu die Zeile
01.
type "%RechnerList%" & pause
unmittelbar nach der Zeile set "RechnerList=..." ein, wobei das type "%RechnerList%" aus der for-Zeile kopiert sein sollte.

Grüße
bastla
Bitte warten ..
Mitglied: FARYS
02.07.2007 um 15:36 Uhr
Hier die Ausgabe nach der Änderung:
________________________________

Y:\admin\ordner1\ordner2>loggini.bat

Y:\admin\ordner1\ordner2>set "RechnerList=D:\Rechner-List.txt" type "" & pause
Drücken Sie eine beliebige Taste . . .

Y:\admin\ordner1\ordner2>set "ShutDownList=D:\Rechner-PsLoggedOn.txt"

Y:\admin\ordner1\ordner2>if exist "D:\Rechner-PsLoggedOn.txt" del "D:\Rechner-PsLoggedOn.txt"

Y:\admin\ordner1\ordner2>for /F "delims=" %i in ('type "D:\Rechner-List.txt" type ""') do call :ProcessComp "%i"
Das Gerät ist nicht bereit.

Y:\admin\ordner1\ordner2>goto :ShutEmDown

Y:\admin\ordner1\ordner2>if exist "D:\Rechner-PsLoggedOn.txt" for /F "usebackq delims=" %r in ("D:\Rechner-PsLoggedOn.txt") do psshutdown.exe
Y:\admin\ordner1\ordner2>


......hmmm...ich habe type "%RechnerList%" & pause hinzugefügt
......warum wird der Name : "%RechnerList%" in der Kommandozeile nicht angezeigt (also nur "")??
Bitte warten ..
Mitglied: bastla
02.07.2007 um 15:40 Uhr
Hallo FARYS!

01.
type "%RechnerList%" & pause
muss in einer eigenen Zeile stehen - damit wird dann der Inhalt der Rechnerliste zur Kontrolle angezeigt ...

Grüße
bastla
Bitte warten ..
Mitglied: FARYS
18.07.2007 um 15:26 Uhr
Hallo,

bin wieder da.

Also....in meinem Script war ein Pfadfehler, deswegen habe ich immer diese Ausgabe "Das Gerät ist nicht bereit" bekommen. Nach der Korrektur spricht der Script in der "RechnerList" genannten PCs an
....aber ...anstatt sie herunterzufahren (Remoterechner), führt er psshutdown auf dem lokalen (meinem) Rechner! ??????
Sollte ich pstools in einen konkreten Ordner auf den Remoterechnern installieren?? Muss man noch andere Einstellungen (Freigaben..) vornehmen??

Danke für Antworten!

farys
Bitte warten ..
Mitglied: bastla
18.07.2007 um 15:43 Uhr
Hallo FARYS!

Den Rechnernamen musste Du schon mitgeben:
01.
... 
02.
if exist "%RechnerList%" for /F "usebackq delims=" %%r in ("%RechnerList%") do psshutdown.exe <b>\\%%r</b>
Grüße
bastla
Bitte warten ..
Mitglied: FARYS
18.07.2007 um 16:10 Uhr
;);););););)......was man alleine übersehen kann!!!;)

VIELEN DANK! bastla!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...