wie kann man beim Abmelden eines Benutzers ein Skript so ausführen, daß
der Benutzer die Wahl hat, ob das Skript laufen soll oder nicht?
Unter XP habe ich das immer mit Xecutor gemacht. Der hat dann beim
Benutzer nachgefragt, ob das Skript gestartet werden soll, und man
konnte sich dann entscheiden.
Unter Windows7 läuft der Xecutor nicht mehr.
Wenn ich das Skript als Abmeldeskript definiere, dann wird es einfach
jedesmal ausgeführt, aber das möchte ich nicht.
Wie macht man das kunstgerecht?
Danke+Gruß!
--
Andre
Tann
Ein extra Programm brauchst Du nicht. Das geht sowohl unter XP als auch
unter Win7 mit Bordmitteln. Erstelle eine Textdatei mit der Endung .vbs
und kopiere unten stehenden Code rein. Pfad anpassen! Batch-Name
anpassen! Diese Datei fᅵhrst Du dann beim Abmelden aus.
Peter
'------------------------------------------------------------
'/Batch-Datei nach vorheriger Abfrage ausfᅵhren/
Option Explicit
Dim result
Dim wsh
result = MsgBox("Abmeldeskript ausfᅵhren?", 1, "Titel des Fensters")
If result = 1 Then
Set wsh = CreateObject("Wscript.Shell")
wsh.Run """<PFAD ZUM SCRIPT>\Abmeldescript.cmd""", 0
Set wsh = Nothing
End If
'------------------------------------------------------------
Statt OK/Cancel gibt es natᅵrlich auch Ja/Nein:
result = MsgBox("Abmeldeskript ausfᅵhren?", 4, "Titel") '4 = Ja/Nein
If result = 6 Then '6 = Ja
http://msdn.microsoft.com/en-us/library/sfw6660x%28VS.85%29.aspx
Peter
Gibt es das auch f�r die Anmeldung, genauer gesagt f�r das Auto Logon?
Servus
Manfred
Indem Du ein Skript schreibst, das diese Abfrage selbst durchführt?
With CreateObject("WScript.Shell")
Select Case .PopUp("Sollen wa dat jetzt machen?", _
30, WScript.ScriptName, _
vbQuestion Or vbYesNo Or vbSystemModal)
Case vbYes: .Run "Oh Du Froehliche.wav"
Case Else: WScript.Quit
End Select
End With
Dieses VBScript-Fragment erzeugt ein Dialogfeld mit der Frage. Wird nach
30 Sekunden keine Antwort geliefert, beendet sich das Skript ohne jede
weitere Aktion.
--
ЯR
vielen Dank für eure Vorschläge!
Peter Schleif wrote:
> Ein extra Programm brauchst Du nicht. Das geht sowohl unter XP als
> auch unter Win7 mit Bordmitteln. Erstelle eine Textdatei mit der
> Endung .vbs und kopiere unten stehenden Code rein. Pfad anpassen!
> Batch-Name anpassen! Diese Datei führst Du dann beim Abmelden aus.
Ich hab mir jetzt aus euren Vorschlägen ein vbs-Skript gebastelt, das
das tut, was ich mir vorstelle.
Aber kann man das als Logoff-Skript definieren? Wenn die Logoff-Skripten
ausgeführt werden, dann ist die normale Windows-Oberfläche ja schon weg,
sodaß meiner Vorstellung nach kein Dialogfenster mehr aufpoppen kann.
Ich frage deswegen, bevor ich es ausprobiere, weil ich auf die Kiste im
Moment nur remote zugreifen kann. Wenn ich jetzt ein Skript einbaue, das
ein Problem verursacht, dann startet die Maschine möglicherweise nicht
mehr, und ich habe keinen Zugriff mehr.
Danke und Gruß!
--
Andre Tann
> With CreateObject("WScript.Shell")
> Select Case .PopUp("Sollen wa dat jetzt machen?", _
> 30, WScript.ScriptName, _
> vbQuestion Or vbYesNo Or vbSystemModal)
> Case vbYes: .Run "Oh Du Froehliche.wav"
> Case Else: WScript.Quit
> End Select
> End With
>
> Dieses VBScript-Fragment erzeugt ein Dialogfeld mit der Frage. Wird
> nach 30 Sekunden keine Antwort geliefert, beendet sich das Skript ohne
> jede weitere Aktion.
Das tut es, in der Tat. Und es funktioniert auch, wenn ich es einfach
durch Doppelklick aufrufe. Klicke ich dann auf "Ja", dann läuft das
Backup-Skript durch.
Wenn ich es aber als Logoff-Skript aufrufen lasse, dann kriege ich zwar
beim Abmelden die Abfrage, aber das eigentliche Backup-Skript wird auch
dann nicht ausgeführt, wenn ich auf "Ja" geklickt habe.
Warum?
--
Andre Tann
Das Skript muss warten, bis das Backup-Programm fertig ist, der Befehl
dafür lautet:
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
*Run Method* (Windows Script Host)
http://msdn.microsoft.com/en-us/library/d5fk67ky%28VS.85%29.aspx
bWaitOnReturn muss auf True gesetzt werden, für den obigen Befehl lautet
dann die Syntax:
Case vbYes: .Run "Oh Du Froehliche.wav", , True
Alternativ dazu kann auch der Rückgabewert des ausgeführten Befehls in
einer Variable gespeichert und ausgewertet werden:
Case vbYes: intReturn = .Run("Oh Du Froehliche.wav", , True)
Die Syntax von VBScript ist leider etwas gewöhnungsbedürftig, in dieser
Anweisung müssen Klammern gesetzt werden. Es gibt jedoch genug Beispiele
im Web.
*Script Center*
http://technet.microsoft.com/en-us/scriptcenter/default.aspx
--
ЯR
> Das Skript muss warten, bis das Backup-Programm fertig ist, der Befehl
> dafür lautet:
> object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
> bWaitOnReturn muss auf True gesetzt werden, für den obigen Befehl
> lautet dann die Syntax:
> Case vbYes: .Run "Oh Du Froehliche.wav", , True
Das hab ich probiert. Der Unterschied ist nun, daß die DOS-Box (oder wie
man dieses schwarze CLI-Fenster nennt...) ganz kurz aufpoppt, und dann
wars das auch schon wieder. Das Backupskript läuft trotzdem nicht durch.
Sorry, daß ich da so genau nachfragen muß, aber das ist sozusagen das
erste Mal, daß ich ein vbs schreibe.
Danke+Gruß!
--
Andre Tann
> Das hab ich probiert. Der Unterschied ist nun, daß die DOS-Box (oder
wie
> man dieses schwarze CLI-Fenster nennt...) ganz kurz aufpoppt, und dann
> wars das auch schon wieder. Das Backupskript läuft trotzdem nicht
durch.
>
> Sorry, daß ich da so genau nachfragen muß, aber das ist sozusagen das
> erste Mal, daß ich ein vbs schreibe.
Ich habe hier zwar auch eine 7er Ultimate oder sowas, allerdings habe
ich derartiges damit noch nicht probiert. Du müsstest schon Dein
Backup-Script hier posten, vielleicht fände sich dann eine Lösung. Ich
benutze jedoch weiterhin hauptsächlich XP, deshalb bin ich nicht so der
große Sieben-Experte. Es wird wohl an Deinem Backup-Script liegen, das
irgendeinen Fehler produziert.
--
ЯR
> Ich habe hier zwar auch eine 7er Ultimate oder sowas, allerdings habe
> ich derartiges damit noch nicht probiert. Du müsstest schon Dein
> Backup-Script hier posten, vielleicht fände sich dann eine Lösung. Ich
> benutze jedoch weiterhin hauptsächlich XP, deshalb bin ich nicht so
> der große Sieben-Experte. Es wird wohl an Deinem Backup-Script liegen,
> das irgendeinen Fehler produziert.
Glaube nicht, daß es einen Fehler produziert, denn wenn ich es teste,
dann funktionierts problemlos, auch wenn ich es über das vbs-Skript
starte. Hier das Einzeiler-"Skript":
robocopy.exe "C:\users\atann" "S:\Backup\atann\backup" /MIR /W:0 /R:0
/REG /FFT /NP /TEE /LOG:s:\backup\atann\backuplog.log
(alles in einer Zeile)
Gruß!
AT
--
Andre Tann
> Glaube nicht, daß es einen Fehler produziert, denn wenn ich es teste,
> dann funktionierts problemlos, auch wenn ich es über das vbs-Skript
> starte. Hier das Einzeiler-"Skript":
>
> robocopy.exe "C:\users\atann" "S:\Backup\atann\backup" /MIR /W:0 /R:0
> /REG /FFT /NP /TEE /LOG:s:\backup\atann\backuplog.log
Also schön, da ich so was auch für mich gebrauchen könnte, habe ich das
mal etwas weiter entwickelt und auch unter Sieben getestet. Bei mir
funktioniert es. Vielleicht noch der Hinweis, dass die Ausgabe im
folgenden Skript im temporären Benutzerverzeichnis (%Temp%\Robocopy.txt)
gespeichert wird, falls irgendwelche kryptischen Fehler auftreten
sollten.
Die Pfade sind eventuell an die jeweiligen lokalen Gegebenheiten
anzupassen. Sind in einem Pfad Leerzeichen enthalten, so müssen
dreifache Anführungszeichen verwendet werden, wie im Skript demonstriert
wird.
'########################### Sicherung.vbs ############################
Rem von h.r.roesler
' Skript wurde getestet mit Windows 7 64bit Ultimate Edition
Option Explicit
Const ForAppending = 8
Dim fso, strProg, strOrigFolder, strDestFolder, strArgs, strCmd, strOut
Set fso = CreateObject("Scripting.FileSystemObject")
strProg = """J:\Windows Resource Kits\Tools\robocopy.exe"""
strOrigFolder = "C:\Users\atann"
strDestFolder = "S:\backup\atann\"
strArgs = fso.BuildPath(strDestFolder, "backuplog.log")
strArgs = " /MIR /W:0 /R:0 /REG /FFT /NP /TEE /LOG:" & strArgs
strCmd = strProg & " " & strOrigFolder & " " & strDestFolder
strCmd = strCmd & "backup" & " " & strArgs
With CreateObject("WScript.Shell")
Select Case .PopUp("Soll der Benutzerordner gesichert werden?", _
30, WScript.ScriptName, _
vbQuestion Or vbYesNo Or vbSystemModal)
Case vbYes:
With .Exec(strCmd)
strOut = .StdOut.ReadAll
End With
strProg = .Environment("USER")("TEMP")
strProg = .ExpandEnvironmentStrings(strProg)
strProg = fso.BuildPath(strProg, "Robocopy.txt")
With fso.OpenTextFile(strProg, ForAppending, True)
.Write strOut
.Close
End With
End Select
End With
'########################### Sicherung.vbs ############################
--
ЯR