WinFuture-Forum.de: Pc herunterfahren wenn keine Benutzer angemeldet sind + Batch in Batch - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Pc herunterfahren wenn keine Benutzer angemeldet sind + Batch in Batch Shutdown script / start batch in batch


#1 Mitglied ist offline   Your_Desire 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 30. November 15
  • Reputation: 0

geschrieben 30. November 2015 - 09:00

Guten Tag,

folgende Ordnderstruktur:

C:\Test\userFind.bat
C:\Test\runme.bat

Ziel:

Die runme.bat soll die userFind.bat ausführen. Wie geht das mit relativen Pfaden?
Die userFind.bat soll überprüfen, ob ein User "Aktiv" ist, wenn nicht soll der PC heruntergefahren werden.
Ich rufe das Script durch eine Software auf, wo lediglich .bat Dateien ausgeführt werden können. Daher funktioniert der .exe Aufruf nicht, deshalb auch der Weg über Batch in Batch.

Anbei die Inhalte
userFind.bat:
%SystemRoot%\system32\qwinsta.exe > C:\tmp\users.txt 2> C:\tmp\usersErr.txt

Findstr "Active" C:\tmp\users.txt > nul
if errorlevel 1 (
C:\Windows\System32\shutdown.exe -s
) else (
exit 0
)


runme.bat:
@ECHO OFF
start %~dp0userFind.bat


Was mache ich falsch?

Andere Lösungsmöglichkeiten sind auch erwünscht.
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 30. November 2015 - 09:50

Wenn die andere Datei im selben Verzeichnis liegt, kannst Du Dir jeden Pfad sparen; "." ist in Windows Teil des Suchpfades.

Die andere Batch-Datei rufst Du via "CALL" auf. Also "call userfind.bat" .

Übrigens könntest Du auch den Pfad für shutdown.exe weglassen oder, falls das der Anspruch ist, auf den tatsächlichen Windows-Installationspfad verweisen via "%WINDIR%\System32\shutdown.exe" (dem Du mit -t X ein Timeout in X Sekunden mitgeben kannst).

Für andere Ansätze wäre es schön, wenn Du schreiben könntest was Du überhaupt haben möchtest. :)
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Your_Desire 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 30. November 15
  • Reputation: 0

geschrieben 30. November 2015 - 10:33

Beitrag anzeigenZitat (RalphS: 30. November 2015 - 09:50)

Wenn die andere Datei im selben Verzeichnis liegt, kannst Du Dir jeden Pfad sparen; "." ist in Windows Teil des Suchpfades.

Die andere Batch-Datei rufst Du via "CALL" auf. Also "call userfind.bat" .

Übrigens könntest Du auch den Pfad für shutdown.exe weglassen oder, falls das der Anspruch ist, auf den tatsächlichen Windows-Installationspfad verweisen via "%WINDIR%\System32\shutdown.exe" (dem Du mit -t X ein Timeout in X Sekunden mitgeben kannst).

Für andere Ansätze wäre es schön, wenn Du schreiben könntest was Du überhaupt haben möchtest. :)



Hallo,

erstmals danke für den Hinweis. Der Aufruf funktioniert.
Jedoch funktioniert mein Shutdown Script nicht ganz so, wie ich es möchte.

Ziel des userFind.bat ist es, dass überprüft werden soll ob ein User eingeloggt ist oder nicht.
Wenn kein User eingeloggt ist, soll der PC heruntergefahren werden.
Ist ein User eingeloggt, dann soll das Script beendet werden.

Aktuell ist es in meinen Tests jedoch so, dass der PC sowohl eingeloggt als auch ausgeloggt heruntergefahren wird. Eingeloggt sollte es jedoch nicht heruntergefahren werden.

Wo liegt der Fehler in meinem Script?

LG
0

#4 Mitglied ist offline   hoschen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 748
  • Beigetreten: 12. Februar 04
  • Reputation: 2

geschrieben 30. November 2015 - 11:30

Mach ein Kommandofenster auf und gib "qwinsta" ein! Hier wirst Du evtl. deinen Fehler sehen!

- Active vs. Aktiv
0

#5 Mitglied ist offline   Your_Desire 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 30. November 15
  • Reputation: 0

geschrieben 30. November 2015 - 12:01

Beitrag anzeigenZitat (hoschen: 30. November 2015 - 11:30)

Mach ein Kommandofenster auf und gib "qwinsta" ein! Hier wirst Du evtl. deinen Fehler sehen!

- Active vs. Aktiv


Gilt das auch bei einem englischen Betriebssystem?
Bei mir kommt nämliche Active. Siehe Anhang.

Angehängte Miniaturbilder

  • Angehängtes Bild: 1.PNG

0

#6 Mitglied ist offline   hoschen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 748
  • Beigetreten: 12. Februar 04
  • Reputation: 2

geschrieben 30. November 2015 - 12:41

Was kommt denn als Fehlermeldung, wenn Du das Script in einem Kommandofenster ausführst?
- also erst cmd, in das Verzeichnis c:\test wechslen und dann die Batch ausführen.

Dieser Beitrag wurde von hoschen bearbeitet: 30. November 2015 - 12:42

0

#7 Mitglied ist offline   Your_Desire 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 30. November 15
  • Reputation: 0

geschrieben 30. November 2015 - 13:38

Beitrag anzeigenZitat (hoschen: 30. November 2015 - 12:41)

Was kommt denn als Fehlermeldung, wenn Du das Script in einem Kommandofenster ausführst?
- also erst cmd, in das Verzeichnis c:\test wechslen und dann die Batch ausführen.


Im CMD Fenster kommt kein Fehler, das CMD Fenster schließt sich,
da ja im Skript festgelegt ist das er das Script beenden soll wenn jemand eingeloggt ist.
Ich habe im Skript definiert gehabt, dass er die Fehler in eine usersErr.txt Datei reinschreibt.
Dort kommt folgendes:

{Message(): LoadString failed, Error 15105, (0x00003B01)}



Aber im Allgemeinen ist das lokale ausführen des Scripts nicht das Problem.
Lokal am Computer lassen sich die Scripts ausführen.
Ich führe es aber durch eine Backup Software aus, sodass das Script am Ende des Backups ausgeführt wird.
Der Script darf keinen direkten .exe Aufruf haben, deshalb habe ich ja den Batch in Batch aufruf verwendet, damit die Software nicht meckert. Nun bekomme ich bei der Software folgenden Fehler:


Failed to execute command ''userFind.bat' is not recognized as an internal or external command,

operable program or batch file.

0

#8 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 30. November 2015 - 13:41

:blink:

Also startest Du die ganze Chose via Script? Gut, dann sind Pfadangaben natürlich nicht ganz so optional.

- Was den Test angeht: Kommandozeile öffnen und von dort das Script ausführen, nicht doppelklicken. :)

Wobei mich das schon mal interessieren würde. Was ist das denn für eine Umgebung, die Batchdateien ausführt und .exe-Dateien aber nicht? Bist Du sicher, daß Du nicht einfach das 'start' vor der .exe-Datei vergessen hast? Weil, so ganz ohne .exe-Zugriff läßt sich so viel ja nicht machen.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#9 Mitglied ist offline   Your_Desire 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 30. November 15
  • Reputation: 0

geschrieben 30. November 2015 - 15:16

Beitrag anzeigenZitat (RalphS: 30. November 2015 - 13:41)

:blink:

Also startest Du die ganze Chose via Script? Gut, dann sind Pfadangaben natürlich nicht ganz so optional.

- Was den Test angeht: Kommandozeile öffnen und von dort das Script ausführen, nicht doppelklicken. :)

Wobei mich das schon mal interessieren würde. Was ist das denn für eine Umgebung, die Batchdateien ausführt und .exe-Dateien aber nicht? Bist Du sicher, daß Du nicht einfach das 'start' vor der .exe-Datei vergessen hast? Weil, so ganz ohne .exe-Zugriff läßt sich so viel ja nicht machen.


Ich habe es in der Kommandozeile geöffnet und von dort aus das Script ausgeführt, das Kommandozeilen Fenster hat sich danach beendet nach dem ausführen des Scripts.

Also alles in einem (Script, .exe Dateien,..) liegen unter C:\.
Müsste ich dann innerhalb der Batch Scripte die ganuen Pfade angeben? Wenn ja, wie? Ich habe etwas von "%~dp0", wie könnte ich damit meine Pfade angeben?

Es ist ein Software Tool (Acronis). Dort gibt es die Option Pre/post commands, wo man dann ein Script nach dem Backup ausführen kann.
0

#10 Mitglied ist offline   hoschen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 748
  • Beigetreten: 12. Februar 04
  • Reputation: 2

geschrieben 30. November 2015 - 15:36

Was hast Du dann bei Acronis angegebn?
0

#11 Mitglied ist offline   Your_Desire 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 30. November 15
  • Reputation: 0

geschrieben 30. November 2015 - 15:46

Beitrag anzeigenZitat (hoschen: 30. November 2015 - 15:36)

Was hast Du dann bei Acronis angegebn?



Da gibt es zwei Möglichkeiten.
Man kann entweder einen Server angeben auf dem es liegt,
oder einen Ordner lokal auf dem Computer.

Möchte man den lokalen Ordner auf dem Pc verwenden, gibt man folgendes ein:
Command: C:\Test\runme.bat
Working directory: C:\

Möchte man einen Server angeben auf dem der Script liegt gebe ich folgendes ein:
Command: \\Computername\C$\Scripts\runme.bat

Angehängte Miniaturbilder

  • Angehängtes Bild: 1.PNG

Dieser Beitrag wurde von Your_Desire bearbeitet: 30. November 2015 - 15:47

0

#12 Mitglied ist offline   hoschen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 748
  • Beigetreten: 12. Februar 04
  • Reputation: 2

geschrieben 01. Dezember 2015 - 08:16

 Zitat (Your_Desire: 30. November 2015 - 15:46)

Möchte man den lokalen Ordner auf dem Pc verwenden, gibt man folgendes ein:
Command: C:\Test\runme.bat
Working directory: C:\


Dann mach mal aus dem "Working directory" ein C:\Test
0

#13 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 01. Dezember 2015 - 09:47

 Zitat (Your_Desire: 30. November 2015 - 15:16)

Ich habe es in der Kommandozeile geöffnet und von dort aus das Script ausgeführt, das Kommandozeilen Fenster hat sich danach beendet nach dem ausführen des Scripts.



Da beißt das "exit".

Mach da ein GOTO END draus und setz ans Ende der Datei ein :END .
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#14 Mitglied ist offline   Your_Desire 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 30. November 15
  • Reputation: 0

geschrieben 03. Dezember 2015 - 14:56

Beitrag anzeigenZitat (RalphS: 01. Dezember 2015 - 09:47)

Da beißt das "exit".

Mach da ein GOTO END draus und setz ans Ende der Datei ein :END .


Hallo, entschuldigt die Späte Antwort.

Ich habe das mit dem GOTO End nun ausprobiert.
Folgendes:

Wenn der User eingeloggt ist und ich die "runme.bat" über die CMD ausführe,
passiert nichts. Es sieht dann wie folgt aus (siehe Anhang).

Anschließend habe ich die Parameter mal ausgetauscht um zu gucken ob der PC runterfährt.
Ich habe es angepasst das wenn ein User eingeloggt ist der PC runterfahren soll und wenn keiner eingeloggt ist der PC nicht heruntergefahren werden soll. Das hat auch geklappt, beim ausführen der "runme.bat" über die CMD kam ein Fenster das Windows in weniger als einer Minute heruntergefahren wird.

Also der Script an sich scheint zu funktionieren. Aber über Acronis tut es das irgendwie dennoch nicht.
Habt ihr noch irgendwelche Pläne?

Angehängte Miniaturbilder

  • Angehängtes Bild: 123.PNG

Dieser Beitrag wurde von Your_Desire bearbeitet: 03. Dezember 2015 - 14:56

0

#15 Mitglied ist offline   Samstag 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.023
  • Beigetreten: 14. Juli 07
  • Reputation: 542
  • Geschlecht:unbekannt

geschrieben 03. Dezember 2015 - 15:39

Ich könnte mir vorstellen dass das nicht funktioniert, weil sich Acronis selbst ja auch als irgendein Benutzer anmeldet, vermutlich als Administrator, auf jeden Fall aber als Benutzer mit Adminrechten.
Oder bootest du jedes Mal in die Acronis-Umgebung (Linux)?
Versuch doch mal einen Acronis-Benutzer mit Adminrechten anzulegen und nimm den aus dem Script raus.

Dieser Beitrag wurde von Samstag bearbeitet: 03. Dezember 2015 - 15:41

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0