kaktus67
Goto Top

Popup in vbs wird nicht angezeigt

Ich habe eine vbs-Datei, die ein Popup öffnet.

e25f0f0ab2185a05832f5f19d8ef1ee2-shutdown2

Dieses Script funktioniert einwandfrei, wenn ich die vbs-Datei händisch aufrufe oder in einem Geplanten Task unter meinem Benutzernamen ausführe.
Führe ich die Datei in einem Geplanten Task als NT AUTHORITY\SYSTEM aus, wird das Popup nicht angezeigt (vbs-Datei wird im Hintergrund ausgeführt).

Da die Datei am Server liegt und bei der Anmeldung eines Clients automatisch ein Task generiert wird, der auf die vbs-Datei am Server zugreift, muss ich diesen als NT AUTHORITY\SYSTEM ausführen, damit kein Kennwort benötigt wird. Gibt es eine Möglichkeit, dass das Popup dennoch angezeigt wird?

Dank und Gruß Karl

Content-Key: 72070

Url: https://administrator.de/contentid/72070

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: pacobay
pacobay 05.11.2007 um 01:41:24 Uhr
Goto Top
Hallo Karl,
vermute es liegt an der Art deines Aufrufes im Task Stichwort (Wcript versus cscript)

möglicherweise auch an deinem Popupaufruf

Wenn Du einmal die entsprechenden Zeilen senden würdest könnte ich Dir u.U. genaueres sagen

ciao pacobay
Mitglied: kaktus67
kaktus67 06.11.2007 um 00:35:54 Uhr
Goto Top
Hi & Dank!

Hier ein Auszug aus der vbs:

'Aktuelle Uhrzeit ermitteln!  
Dim Uhrzeit
Uhrzeit = Time

'Uhrzeit festlegen, ab der die Meldung angezeigt werden soll!  
Dim MeldungsUhrzeit
MeldungsUhrzeit = TimeValue("05:45:00 PM")  

'Ermitteln ob die felstgelegte Uhrzeit bereits vorbei ist und Meldung anzeigen!  
If MeldungsUhrzeit > Uhrzeit Then
	Set wshShell = CreateObject("WScript.Shell")  
	iRetVal = wshShell.Popup ("Es ist bereits nach " & MeldungsUhrzeit & " Uhr." & vbLF & _  
		"Dieses Gerät wird in 30 Sekunden automatisch heruntergefahren!" & vbLF & _  
		 vbLF & _
		"Klicken Sie auf Abbrechen, wenn Sie weiterarbeiten möchten." & vbLF & _  
		"Bitte SCHALTEN Sie nach der Arbeit das Gerät VERLÄSSLICH AUS.",30,"Dieses Gerät wird heruntergefahren...", 49)  
	Select Case iRetVal
		Case vbCancel
			WScript.Quit(0)
		Case vbOk
			'Wscript.Echo ("OK wurde geklickt!")  
	End Select
Else
	'Wscript.Echo ("Es ist vor " & MeldungsUhrzeit & " Uhr!")  
	WScript.Quit(0)
End If

Wie gesagt: Wenn die Datei auf dem lokalen PC liegt kein Problem. Nur wenn ich die Datei am Server liegen habe und den Geplanten Task mit NT AUTHORITY\SYSTEM ausführe.
Vielleicht gibt's ja noch ne andere Lösung und ich steh auf der Leitung ;-(
Mitglied: pacobay
pacobay 06.11.2007 um 11:28:05 Uhr
Goto Top
Hallo bei der ersten on the fly Betrachtung des Codes fällt mir das Folgendes auf:

1.
Leider hast du den Taskaufruf nicht gesendet
Aber rufst du dort mit wscript oder cscript auf ?
denn bei csribt würde geerell kein popup angezeit da die ausgabe in die doswelt geht
ich würde explizit mit wscript aufrufen

2.
dann noch eine allgemeine Ergänzung:
bezogen auf den Popupaufruf würde ich den modualen wert hinzufügen
also 49 + 4096
Modal bedeutet :All applications are suspended until the user responds
oder anders ausgedrückt:
das Popup ist vorne und bevor user etwas anderes machen kann muß er entweder reagieren sprich klicken oder er muß warten bis popup nach deinen 30 sekunden von selbst verschwindet

3.
So aus dem Bauch heraus könnte ich mir auch vorstellen, daß das script sehr wohl lokal ausgeführt wird aber durch anfängliche Bedingung (Zeitwertvergleich ergibt immer: nicht größer weil Variablen nicht wirklich vergleichbar sind) und folglich niemals etwas passiert und deshalb auch kein popup angezeigt wird.

Gegen diese Annahme spricht aber Deine Aussage: läuft wenn lokal ausgeführt

Trotzdem einfach weil mein Bauch so grummelt werde ich das heute nachmittag mal testen

Zu 3: weil Variablen nicht wirklich vergleichbar sind
Ist ein allgemeines Problem bei Zeitwertvergleichen sofern diese formal nicht richtig vergleichbar sind
weil es ein allgemeines problem gibt Time-variablen in unterschiedlichen Betriebssystemen bzw bei gleichen OS und unterschiedlichen festlegungen der Zeitanzeigenverwendung
Habe selber nur immer wieder stress gehabt mit Zeitwertvergleichen allerdings eher im batchbereich . Als ich mit vbs angefangen hatte ich mir schon angewöhnt die Werte immer zu vereinheitlichen und war so mehr auf der sicheren seite

Und ob
Uhrzeit = Time
und
MeldungsUhrzeit = TimeValue("05:45:00
PM")
wirklich vergleichbar sind weiß ich so direkt nicht


4.
bezogen auf das eigentliche Problem und daher nur am Rande bemerkt:

Else
'Wscript.Echo ("Es ist vor "
& MeldungsUhrzeit & "
Uhr!")

Dieser Bereich erscheint mir unnötig weil kann nicht eintreten
denn wenn die ganze if nur läuft wenn aktuelle Zeit > der festgelegten Zeit ist
dann kann es doch niemals vorher sein?
Unter der Annahme Vergleich funktioniert überhaupt vgl 3

5.

Wie gesagt: Wenn die Datei auf dem lokalen
PC liegt kein Problem. Nur wenn ich die Datei
am Server liegen habe und den Geplanten Task
mit NT AUTHORITY\SYSTEM ausführe.
Vielleicht gibt's ja noch ne andere
Lösung und ich steh auf der Leitung ;-(

auch aus dem Bauch heraus
kann mir irgendwie nicht vorstellen, dass es am NT AUTHORITY\SYSTEM liegt

aber frei nach dem Motto: kannst werden so alt wie ne Kuh lernst immer noch dazu
werde ich daher mal bei mir simulieren
aber irgendwann später
doch noch heute
versprochen

ciao pacobay
Mitglied: kaktus67
kaktus67 06.11.2007 um 23:36:40 Uhr
Goto Top
Danke für die große Mühe!

Ui, da habe ich wohl was Wesentliches vergessen:
Der "Geplante Task" wird bei der Anmeldung am Domänencontroller per LogonScript erzeugt:

rem ####autoshutdown.cmd###########
schtasks /delete /TN * /F
schtasks /create /TN AutoShutdown /TR "\\Server\netlogon\autoshutdown.vbs" /SC BEILEERLAUF /I 15 /ru System  
rem ########################

Das funktioniert auch bestens. Kann ich im Taskmanager überprüfen.
Den System-Account muss ich mitschicken, damit der User kein DOS-Fenster bekommt, in dem er nochmals sein Kennwort zum Erzeugen des Tasks eingeben muss.

Der Aufruf funktioniert lokal wirklich.
Wenn ich es nach 17:45 Uhr probiere kommt das Fenster, sonst nicht (bzw. wenn ich vor 17:45 Uhr das > durch ein < Zeichen ersetze *g*

Else
	'Wscript.Echo ("Es ist vor " & MeldungsUhrzeit & " Uhr!")  
	WScript.Quit(0)

Habe ich nur zum Testen der "Uhrzeiterkennung" drinnen. Damits auf Wunsch vor der Zeit auch popupt.

Das einzige Problem was ich habe ist, dass ein Task mit NT AUTHORITY\SYSTEM im Hintergrund ausgeführt wird. (siehe auch: http://www.microsoft.com/technet/prodtechnol/windowsserver2003/de/libra ...
unter: "So planen Sie einen Task, der mit Systemberechtigungen ausgeführt wird").

Das gleiche Script habe ich an einigen Schulen ohne PopUp-Hinweis problemlos laufen. Jetzt habe ich einen Sonderfall an einer Schule, die ein PopUp benötig, um das Herunterfahren abzubrechen.

Vielleicht gibts ja auch eine ganz andere Möglichkeit.
- Beim Anmelden an der Domäne soll der PC beginnen, die Leerlaufzeit zu überprüfen
- Nach abgelaufener Leerlaufzeit soll ein Hinweis erscheinen, auf den man reagieren kann
- Bei keiner Aktivität soll der PC herunterfahren & ausschalten.

Jetzt hab ich das Ganze in VB.NET programmiert (EXE-Datei). Ich bin richtig stolz - läuft bestens - aber wieder nur lokal *g*
Am Server gibts jetzt Probleme mit den CAS-Framework-Rechten (zumindest, wenn ich sie am Client nicht händisch ändere - und das will ich nicht).
Waren das noch Zeiten, als man eine Datei einfach auf den Server kopieren mußte und ab ging's.
Aber... das ist eine andere Geschichte.

So jetzt werde ich mal den modularen Wert testen. Vielleicht findet sich ja noch was.
Mitglied: pacobay
pacobay 07.11.2007 um 09:03:14 Uhr
Goto Top
Hallo kaktus 67

also hatte gestern dein script nochmal getestet
und mußte leider fesstellen dass meine on the fly analyse nicht besonders gut war

die else macht natürlich sinn sorry

Das Einzige was in diesem Sinne bleibt ist
dass die if Bedingung doch nur anderersherum Sinn macht. oder?
If MeldungsUhrzeit > Uhrzeit Then
wohl
If MeldungsUhrzeit < Uhrzeit Then

Aber selbst das ist ja für das Problem erstmal total egal

Auch war mein Bauchgefühl nicht besonders zutreffend
Denn das mit der Uhrzeit klappt so wie du es gemacht hast
ohne probleme

der Aufruf eines popups mit +4096 (System modal) ist allg hilfreich löst es aber wahrscheinlich auch nicht

Und nachdem ich deine Antwort gelesen habe , frage ich mich ob die Zielerreichung nicht
einfacher via GPO zu lösen wäre

schau mal unter
http://www.mcseboard.de/windows-forum-allgemein-28/automatisches-abmeld ...

insbesondere den hinweis
http://support.microsoft.com/default.aspx?scid=kb;de;314999

habe mal vor längerem das ding verwendet
ist zu lange her um noch genaueres zu sagen

Aber ich meine mich zu erinnern, dass die zeitangabe in millisekunden oder so läuft
Ich erwähne dies nur weil ich damals angenommen hatte, es wären sekunden
Habe dann user statt nach einer stunde oder so nach wenigen minuten inaktivität rausgekegelt. Kam nicht ganz so gut face-wink

ciao pacobay