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

(BAT,CMD) Shutdown mit Prüfung ob User angemeldet ist

Frage Entwicklung Batch & Shell

Mitglied: hoffi3d

hoffi3d (Level 1) - Jetzt verbinden

04.04.2014, aktualisiert 16.04.2014, 3473 Aufrufe, 13 Kommentare

Hallo zusammen,

ich habe eine BAT Datei die automatisiert alle PC´s bei mir sichert. Die PC´s werden via WOL hochgefahren, dann auf meinen PC zwischengespeichert eh der Weg dann auf eine USB Festplatte geht.
Soweit so gut, alles funktioniert.

Jetzt stehe ich vor dem Problem, das ich die PC´s nach der Sicherung herunterfahren möchte, sofern KEIN User angemeldet ist.

Bisher bin ich soweit:

::@echo off
Set nutzer=user
Set passwort=pw



psloggedon \\rechnername -l -x > d:\sicherung\loggedin.tmp

net use z: \\rechnername\d /user:%nutzer% %passwort%
shutdown /s /m \\rechnername
net use z: /delete /yes
Ich würde mit shutdown den PC herunterfahren, das klappt.

mit psloggedon will ich auslesen ob jemand angemeldet ist, das klappt auch!

Nur wie lese ich das Ganze jetzt aus und bastel daraus ein Wenn/Dann; If/Else ????
ich komme einfach nicht wirklich weiter!

Vielen Dank im vorraus
Mitglied: SaschaRD
04.04.2014, aktualisiert um 08:54 Uhr
Morgen hoffi3d,
01.
Hier deine psloggedon Abfrage 
02.
IF ERRORLEVEL = 1 ( 
03.
echo niemand ist angemeldet 
04.
Hier dein shutdown Befehl 
05.
) ELSE ( 
06.
echo jemand ist angemeldet 
07.
)
Gruß, Sascha
Bitte warten ..
Mitglied: hoffi3d
04.04.2014 um 09:31 Uhr
Hallo Sascha,

das ist nicht ganz richtig(denke ich!?)

Erstmal korrigiere ich mich es muss heißen:

psloggedon \\rechnername -x > d:\sicherung\loggedin.tmp (ohne -l)

Wenn am fernen Rechner niemand angemeldet ist bekomme ich =>

Connecting to Registry of \\ferner_rechner...

No one is logged on locally.

Users logged on via resource shares:
mein_rechner\mein_user


zurück

Wenn aber jemand angemeldet ist:

Connecting to Registry of \\ferner_rechner...

Users logged on locally:
ferner_rechner\angemeldeter_user

Users logged on via resource shares:
mein_rechner\mein_user


So sieht es dann aus!

Kannst du mir sagen wie ich den Code wie du formatieren kann?
Bitte warten ..
Mitglied: SaschaRD
04.04.2014, aktualisiert um 10:50 Uhr
Hallo hoffi3d,

führe ich die obengenannte IF Bedingung aus, erhalte ich je nach Anmeldung das gewünschte Ergebnis.

Ich erläutere die Bedingung etwas genauer:
01.
psloggedon \\rechnername -x > d:\sicherung\loggedin.tmp 
02.
IF ERRORLEVEL = 1 (  
03.
echo niemand ist angemeldet 
04.
Hier dein shutdown Befehl 
05.
) ELSE ( 
06.
echo jemand ist angemeldet 
07.
)
Deine Abfrage bzw. der Aufruf von psloggedon in Zeile 1, gibt dann einen Wert zurück "1" oder "0".
1 = niemand ist angemeldet
0 = jemand ist angemeldet
Ist gleich zu setzen mit true/false.

Ist niemand an diesem PC angemeldet, soll er herruntergefahren werden.
Dann wird unter dem "echo" das shutdown eingefügt (die echo's können später natürlich entfernt werden, sind zum Testen aber sehr praktisch)
01.
psloggedon \\rechnername -x > d:\sicherung\loggedin.tmp 
02.
IF ERRORLEVEL = 1 (  
03.
echo niemand ist angemeldet 
04.
shutdown /s /m \\rechnername 
05.
Hier dein shutdown Befehl 
06.
) ELSE ( 
07.
echo jemand ist angemeldet 
08.
)
Frage: Wofür ist der net use?
Speicherst Du auf den PC(d:\sicherung\) die log?

Gruß, Sascha
Bitte warten ..
Mitglied: hoffi3d
04.04.2014 um 12:11 Uhr
hallo Sascha,

in beiden Fällen, also mit angemeldeten User als auch ohne erhalte ich immer das Echo jemand ist angemeldet.
Für mich auch einleuchtend, da es ja kein Error ist wenn niemand angemeldet ist!

Ich bekomme den shutdown befehl nur ausgeführt wenn ich mich vorher via net use mit dem PC verbinde, sonst bin ich nicht berechtigt! Das Ganze funktioniert auch!

Die Log war dafür gedacht mir anzuzeigen was psloggedon ermittelt hat!
Bitte warten ..
Mitglied: Xaero1982
05.04.2014, aktualisiert um 13:05 Uhr
Das geht so nicht, weil psloggedon offenbar keinen ERRORLEVEL kennt.

Was du mit der Sicherung meinst keine Ahnung... aber versuchs mit Powershell Ungetestet an Remote-PCs

01.
$temppath = $env:temp 
02.
$strFileName=$temppath+"\log.txt" 
03.
$strSecureFileName=$temppath+"\securestring.txt" 
04.
$strComputerName="Computername" 
05.
$username = "domänenname\Benutzername"  
06.
 
07.
Write-Host "Bitte geben Sie das Administratorpasswort vom Remote-PC ein!" 
08.
 
09.
read-host -assecurestring | convertfrom-securestring | out-file $strSecureFileName ` 
10.
 
11.
$password = cat $strSecureFileName | convertto-securestring 
12.
$cred = new-object -typename System.Management.Automation.PSCredential ` 
13.
         -argumentlist $username, $password 
14.
 
15.
Write-host "Passwort wurde verschlüsselt und in der Datei $strSecureFileName gespeichert" 
16.
 
17.
 
18.
If (Test-Path $strFileName){ 
19.
	Remove-Item $strFileName 
20.
} Else { 
21.
Get-WmiObject -Class win32_process -ComputerName $strComputerName -Credential $cred |  
22.
    Where-Object{ $_.Name -eq "explorer.exe" } |  
23.
    ForEach-Object{ ($_.GetOwner()).Domain + "\\" + ($_.GetOwner()).User | Out-file $strFileName -Encoding ASCII; } 
24.
25.
 
26.
If (Test-Path $strFileName){ 
27.
    Write-Host "Es ist noch ein Benutzer angemeldet!" 
28.
} Else { 
29.
    write-host "Es ist kein Benutzer mehr angemeldet. Der PC wird jetzt herunter gefahren!" 
30.
   #stop-computer -Computername $strComputerName -Authentication default -Credential $cred 
31.
32.
 
33.
 
34.
If (Test-Path $strFileName){ 
35.
   Remove-Item $strFileName 
36.
37.
Remove-Item $strSecureFileName 
38.
 
39.
    Write-Host "Dateien gelöscht!" 
40.
 
Das speicherst du in einer Datei mit der Dateiendung .ps1.

Wenn nicht bereits getan musst du in der Powershell vorher: (Powershell muss als Administrator ausgeführt werden)

01.
Set-ExecutionPolicy unrestricted
eingeben und mit "J" bestätigen.

Zum Ausführen der Powershelldatei kannst du einen Rechtklick darauf machen und "mit Powershell ausführen" klicken.

Im Script musst du:

01.
#stop-computer -Computername $strComputerName -Authentication default -Credential $cred
das # Zeichen entfernen (# steht für Kommentierungen) - Diese Zeile ist aber ungetestet.

Wenn es um einen lokalen PC handelt auf dem du das Script ausführst musst du in der Zeile
01.
Get-WmiObject -Class win32_process -ComputerName $strComputerName -Credential $cred | 
Das -Credential $cred
entfernen - sonst gibt es eine Fehlermeldung.

Zur Erläuterung:
Zeilen 1-5 werden Variablen definiert.
:1 Der Tempordner wird in $temppath geschrieben
:2 Der Pfad einer Temporären Datei wird aus dem Temppfad und dem Dateinamen "log.txt" "zusammen gebaut
:3 Siehe 2 für die Passwortdatei
:4 Hier den Remote-PC Namen eintragen - kann man auch über Read-Host direkt in der powershell abfragen
:5 Username der auf dem Remote-PC Adminrechte hat
:7 Simple Ausgabe
:9 Das Passwort wird eingelesen und die Anzeige so umgestellt, dass nur *** erscheinen und in die Passwortdatei geschrieben
:11 Das Passwort wird in der Variable $password gesichert aus der Passwortdatei
:12 Die Variable $cred wird mit dem Passwort und dem Usernamen "gefüllt"
:15 Simple Ausgabe
:18 Es wird geprüft ob die Temporäre Datei vorhanden ist und wenn ja
:19 diese gelöscht
:20 Wenn nicht wird abgefragt ob auf dem Remote-PC der Prozess "Explorer.exe" läuft, welcher nur läuft wenn ein Benutzer angemeldet ist. Wenn ja wird der Computername in die Temporäredatei geschrieben die zeitgleich erstellt wird. Wenn niemand angemeldet ist wird auch keine Datei erstellt - noch nicht mal eine leere.
:26 Wenn die Tempdatei vorhanden ist, ist jemand angemeldet und es gibt eine simple Ausgabe
:28 Wenn nicht
:29 Simple Ausgabe
:30 PC wird herunter gefahren
:34 Wenn die tempdatei vorhanden ist wird diese gelöscht
:37 Passwortdatei wird gelöscht

Gruß
Bitte warten ..
Mitglied: hoffi3d
07.04.2014 um 08:47 Uhr
Hallo,

nur leider würde ich dann von neuem anfangen, ich habe ja bereits eine bat Datei die funktioniert.
Mit dieser würde ich gerne weiterarbeiten...! Von Powershell habe ich keine Ahnung -_-

Eine Lösung in BAT wäre toll!!
Bitte warten ..
Mitglied: Xaero1982
07.04.2014, aktualisiert um 09:15 Uhr
Dann rufst du es eben auf aus der Batch oder die batch aus der powershell...

Du kannst das auch mit VBS + WMI machen... aber offenbar nicht mit Batch, außer du versuchst die Ausgabe von ps loggedon zu zerlegen und auszulesen wenn niemand angemeldet ist, aber das bekommen hier andere sicher besser hin mit Strings zerlegen etc.

Noch dazu sehe ich jetzt nicht groß was da noch fehlt ... WOL kannst du auch aus der Powershell aufrufen und eine "Sicherung" was auch immer du sicherst auch... Was das Script noch machen soll keine Ahnung

Gruß
Bitte warten ..
Mitglied: hoffi3d
07.04.2014 um 10:11 Uhr
Hallo Xaero,

ok das ist eine Variante.

Naja ich habe diverse Logs und auch eine automatisierte eMail Erstellung und alles soweit fertig das es 1A läuft.
In Powershell müsste ich erst einarbeiten.
Wenn ich nichts finden sollte, werde ich deine Lösung kopieren.
Vielen Dank erstmal!
Bitte warten ..
Mitglied: Xaero1982
07.04.2014 um 10:52 Uhr
Was du noch machen kannst ist die Ausgabe von psloggedon in eine txt-datei zu schreiben, diese einzulesen und nach dem entsprechenden String zu suchen der besagt, dass niemand mehr angemeldet ist. Wenn das so ist soll er den pc herunter fahren...
Bitte warten ..
Mitglied: hoffi3d
07.04.2014 um 10:57 Uhr
jep, nur leider weiß ich nur wie ich etwas in eine Datei schreibe, wie ich diese wieder auslese, daran hapert es!
Bitte warten ..
Mitglied: Xaero1982
LÖSUNG 07.04.2014, aktualisiert 16.04.2014
01.
@echo off 
02.
set logdatei=d:\sicherung\loggedin.txt 
03.
set pstools=c:\pstools\ 
04.
set rechnername=bitteändern 
05.
 
06.
%pstools%psloggedon \\%rechnername% -l -x > %logdatei% 
07.
 
08.
find /i "DEIN Text der Aussagt, dass niemand eingeloggt ist" %logdatei% 
09.
if errorlevel 1 goto angemeldet 
10.
%pstools%psshutdown -u %nutzer% -p %passwort% \\%rechnername%  
11.
goto EOF 
12.
 
13.
:angemeldet 
14.
Echo Es ist noch ein Benutzer angemeldet! 
15.
goto EOF 
16.
 
17.
:EOF 
18.
del %logdatei% 
19.
 
Weiß nicht wie der String ist wenn niemand angemeldet ist. Den musst du dann oben einsetzen.
Allerdings bin ich mir nicht sicher wie das bei psloggedon mit den Berechtigungen ist. Also ob du die überhaupt auslesen kannst ohne pw und username.

Gruß
Edit: Ungetestet - schreibe vor das shutdown (beachte PSSHUTDOWN aus den pstools - da kannst du username und pw übergeben) ein Echo zum testen.
Bitte warten ..
Mitglied: hoffi3d
16.04.2014 um 09:09 Uhr
Danke das klappt!
Sorry für die späte Antwort!

VIELEN DANK
Bitte warten ..
Mitglied: Xaero1982
16.04.2014 um 09:13 Uhr
Zitat von hoffi3d:

Danke das klappt!
Sorry für die späte Antwort!

VIELEN DANK

Super!
Besser spät als nie wie manch anderer ;P

Gerne!

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Tools
Suche Batch Scheduler (.bat .cmd .exe) (8)

Frage von hf1965 zum Thema Windows Tools ...

Batch & Shell
gelöst Batch: Remote shutdown wenn niemand angemeldet ist (2)

Frage von pablovic zum Thema Batch & Shell ...

Netzwerkmanagement
gelöst Welche Freigaben haben welche Rechner im Netzwerk und welche User ist angemeldet? (5)

Frage von M.Marz zum Thema Netzwerkmanagement ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...