badwolf
Goto Top

VBS Script fürs Autologon

wenn Win 7 und Gruppenzugehörigkeit xxxx, dann CAD-Script

Stehe momentan gewaltig aufm Schlauch.
In einem Logonscript müsste eine Betriebssystemabfrage eingebaut werden und dann für verschieden Programme zugehörige Batchprogramme ausgeführt werden.

wenn Win 7 und Gruppenzugehörigkeit xxxx, dann CAD-Script

if %os% == Windows_XP
then
Set ws = Wscript.CreateObject("Wscript.Shell")
ws.run ("Cmd /c:\scripttest\test1.bat"),
ws.run ("Cmd /c:\scripttest\test2.bat"),
ws.run ("Cmd /c:\scripttest\test3.bat")
endif;

Wahrscheinlich ist das, was ich bissher entworfen habe umständlich und auch die Abfrage nach der Benutzergruppe (AD) ist noch nicht integriert.

Für Hilfe wäre ich dankbar ;)

Der frühe Vogel fängt den Wurm ...
aber die 2.te Maus bekommt den Käse....

denk mal drüber nach...

Content-ID: 185233

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

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

rmarkus
rmarkus 21.05.2012 um 12:15:54 Uhr
Goto Top
Gude,

if (%OS% == Windows_XP & XXXX) then ...

Mit %os% wirst du nicht weiter kommen...Ich gehe davon aus das du sowas suchst...

VER | find "XP" > nul  
IF %errorlevel% == 0 GOTO XP
VER | find "2000" > nul  
IF %errorlevel% == 0 GOTO 2000
VER | find "NT" > nul  
IF %errorlevel% == 0 GOTO NT
VER | find "Microsoft Windows [Version 6.0" > nul  
IF %errorlevel% E== 0 GOTO Vista
VER | find "Microsoft Windows [Version 5.2" > nul  
IF %errorlevel% == 0 GOTO 2003
VER | find "Microsoft Windows [Version 6.1" > nul  
IF %errorlevel% == 0 GOTO Win7

usw...


Gruß Markus
BADwolf
BADwolf 21.05.2012 um 12:26:03 Uhr
Goto Top
danke Markus, ich bin für jeden Tipp dankbar ;)

Was genau aber meinst du mit VER | ...
ab dem | motzt die CMD, das er dieses zeichen nicht kenn, aber sicher bin ich nicht....
rmarkus
rmarkus 21.05.2012 um 13:29:47 Uhr
Goto Top
Hi,

ab dem | motzt die CMD, das er dieses zeichen nicht kenn, aber sicher bin ich nicht....

Also bei mir funktioniert es face-wink, aber ich hab auch gerade gesehen das du ebenfalls die Gruppenzugehörigkeit abfragen willst.
Daher wäre es denk ich besser wenn du mit GPP (Group Policy Preferences) arbeitest, vorausgesetzt du hast eine vorhandene Domäne.


Gruß Markus
BADwolf
BADwolf 21.05.2012 um 13:39:33 Uhr
Goto Top
also etwa so????????
/script-------------------
VER | find "XP" > nul
IF %errorlevel% == 0 GOTO XP
then
Set ws = Wscript.CreateObject("Wscript.Shell")
ws.run ("cmd c:\testscript\test1.bat")
WScript.Echo "Test1.bat erfolgreich gestartet"
endif
/script-------------------

hier sagt windows fehler zeile 1 zeichen 5 ... ergo | ;)
weiter kann das script nicht ausgeführt werden. okay.. hab hier auch kein xp ..
was müsste ich denn mit GPP denn anders machen??? Domäne ist da.
rmarkus
rmarkus 21.05.2012 um 13:51:10 Uhr
Goto Top
Achso, das ganze in Batch und nicht VBS!
Kennst du dich denn in der Domänenstruktur aus, oder ist das absolut neu?

Gruß Markus
BADwolf
BADwolf 21.05.2012 um 13:54:00 Uhr
Goto Top
sagen wir es mal so, ich bin absolut neu ;)
also sowohl in dem Unternehmen als auch im Scripten. Habe auch fast garkeine Rechte.
Ergo muss ich mich darauf konzentrieren eben die Gruppe des angemeldeten Users irgendwie auswerfen zu lassen, wenn möglich.

Gruß Gabriel
BADwolf
BADwolf 21.05.2012 um 13:59:55 Uhr
Goto Top
muss ich denn, wenn ich die Datei als BAT ausführe dann irgendwas besonderes beachten? BZW, muss ich die ganze "Tabelle in BAt ausführen, und wie übergebe ich die den Wert dann an die VBS um damit weiter zu arbeiten
rmarkus
rmarkus 21.05.2012 aktualisiert um 14:17:23 Uhr
Goto Top
Wie gesagt, am besten wäre es wenn du das mittels GPP löst. Ist definitiv eine saubere Lösung. (Wenn nicht die sauberste Lösung)
Ja, ohne Rechte ist das so ne Sache. Da musst du mit deinen vorgesetzten Reden...

Zitat von @BADwolf:
muss ich denn, wenn ich die Datei als BAT ausführe dann irgendwas besonderes beachten? BZW, muss ich die ganze "Tabelle
in BAt ausführen, und wie übergebe ich die den Wert dann an die VBS um damit weiter zu arbeiten

Es wäre von Vorteil wenn du mal sagen würdest was genau du vor hast. Willst du nur weitere Batches ausführen, etwas kopieren, oder ein Programm starten?
Wenn ja, was sollen die weiteren Batches machen, oder die auszüführenden Programme...
BADwolf
BADwolf 21.05.2012 aktualisiert um 14:40:58 Uhr
Goto Top
In einem vorhandenen Login - Script soll überprüft werden (müsste erst eingebunden werden), ob das OS (also XP) und die Gruppe (xxxx) des angemeldeten Benutzers übereinstimmt. Wenn die bedingung erfüllt, soll ein vbs - Script ausgeführt werden, welches entsprechend des Programmes dann die bat startet.
BADwolf
BADwolf 21.05.2012 um 14:58:54 Uhr
Goto Top
okay alles anders! Wie ich gerade erfahren habe....
In einem vorhandenen Login - Script soll überprüft werden (müsste erst eingebunden werden), ob das OS (also XP) und die Gruppe (xxxx) des angemeldeten Benutzers.
Wenn das zutrifft dann soll ein schon vorhandene login.bat gestartet werden.

Wenn aber das OS Windows 7 ist dann müssen andere Scripts (3Stück; Programmabhängig) gestartet werden...
rmarkus
rmarkus 21.05.2012 um 15:09:19 Uhr
Goto Top
Löst es über die Group Policy Preferences (GPP), wie oben bereits erwähnt. Definitiv leichter und
sauberer als die Geschichte zu scripten.


Gruß Markus
BADwolf
BADwolf 22.05.2012 aktualisiert um 12:19:58 Uhr
Goto Top
okay.. soweit der Plan .. ich habe es auch angesprochen aber es SOLL gescripted werden. Mittlerweile bin ich auch ein Stück weiter.
Aber dennoch habe ich eine Fehlermeldung das 'Next', dann 'End' erwartet wird. Beides gesetzt wird das 'Next' erwartet. Vielleicht kann mir jemand Helfen???

'#######################################################################################
Dim ObjShell
Dim ShellObject
DIM OS
'-----------------------OS - ERmitllung------------------------------
Set ShellObject = WScript.CreateObject("WScript.Shell")
Set ObjShell = WScript.CreateObject("WScript.Shell")
Set os = Wscript.CreateObject("Wscript.Shell")
ObjShell = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProductName")
'Wenn Windows XP, dann
if InStr(ObjShell, "XP",1) then
os.run ("c:\scripte\test1")
end if
'Wenn Windows 7, dann
if InStr(ObjShell, "7",1) then
os.run ("cmd c:\scripte\test2")
os.run ("cmd c:\scripte\test3")
os.run ("cmd c:\scripte\test4")
end if
end
'###############################################################################

Zum Ablauf
Es soll überprüft werden in welchen Gruppen der User sich befindet, wenn eine der Gruppen die Gruppe 'xxxxx' ist soll überprüft werden, welches betriebssystem installiert ist und dem entsprechend dann eben die test*.bat ausgeführt werden. Vielleicht nur ein kleiner Fehler aber da ich ziemlich Neu im Scripten bin, kann ich den Fehler nicht extrahieren.

Hoffe das mir irgendwer helfen kann.
bastla
bastla 22.05.2012 aktualisiert um 12:13:37 Uhr
Goto Top
Hallo BADWolf!

Es ist sinnlos, dsa gleiche Objekt unter 3 verschiedenen Namen zu erstellen (und dann - siehe "ObjShell=..." auch noch falsch zu verwenden) - daher sollte eigentlich
'-----------------------OS - ERmitllung------------------------------  
Set ShellObject = WScript.CreateObject("WScript.Shell")  
ProductName = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProductName")  
'Wenn Windows XP, dann  
If InStr(ProductName, "XP") Then  
    ShellObject.Run ("\\oe03817\Launch\login.bat")  
End If
'Wenn Windows 7, dann  
If InStr(ObjShell, "7") then  
    ShellObject.Run ("\\davs240301\cad$\SWX\SolidWorks_2012\00_Logon\swxlogon.bat")  
    ShellObject.Run ("\\davs240301\cad$\ACADME\ACADME2012\00_Logon\acadmelogon.bat")  
    ShellObject.Run ("\\davs240301\cad$\INV\00_Logon\invlogon.bat")  
End If
genügen ...

Grüße
bastla

P.S.: Und schau doch mal in die Formatierungshilfe, wie sich Code besser leserlich darstellen lässt ...
BADwolf
BADwolf 22.05.2012 um 12:41:34 Uhr
Goto Top
Hallo Bastla,

Ja cool, .. danke, konnte es zwar noch nicht ausprobieren, aber das sieht gut aus, muss nur noch die Gruppenabfrage integrieren.
könnte ich hier den Code in eine if abfrage verschachteln, alá:
Dim ObjShell
Dim ShellObject
DIM OS
'--------------------------------
Set objitem = GetObject("LDAP://CN=meinuser,OU=meinou,DC=meindomaene,DC=lo")
Groups = objItem.memberof

If IsArray(Groups) Then
For Each Group In Groups
if InStr(Group,"xxxxx")
Next
'---------------------------------
If InStr(ProductName, "XP") Then
ShellObject.Run ("c:\script\test1.bat")
End If
If InStr(ObjShell, "7") then
ShellObject.Run ("c:\script\test2.bat")
ShellObject.Run ("c:\script\test3.bat")
ShellObject.Run ("c:\script\test4.bat")
End If
'--------------------------------
Else
WScript.Echo "Keine konfiguration notwendig
End If
bastla
bastla 22.05.2012 um 14:24:01 Uhr
Goto Top
Hallo BADwolf!

Grundsätzlich ja, wobei allerdings die Position des "Next" zu überdenken wäre - die Frage ist auch, ob Du nicht vielleicht doch nur den "CN" der Gruppe verwenden willst - entweder per Abfrage des Attributs oder per Zerlegung in der Art von
If InStr(Split(Split(Group, "=")(1), ",")(0)), "xxxx") Then
- damit wird zunächst anhand der "=" zerlegt und der zweite entstehende Teil verwendet, und dieser beim "," weiter unterteilt, wobei dieses Mal der erste Teil gefragt ist ...

Grüße
bastla
BADwolf
BADwolf 22.05.2012 aktualisiert um 15:48:43 Uhr
Goto Top
vielen dank für die Mithilfe ;)

wenn ich nun das in das script eintrage und es versuche laufen zu lassen habe ich einen Kompatibilitätsfehler in Zeile 5 ... hoffe das es der letzte post ist ;)

Set objitem = GetObject("LDAP://CN=meinuser,OU=meinou,DC=meindomaene,DC=lo")   
Groups = objItem.memberof 
If IsArray(Groups) Then 
 For Each Group In Groups 
  If InStr(Split(Split(Group, "=")(1), ",")(0)), "xxxx") Then  
   If InStr(ProductName, "XP") Then   
     ShellObject.Run ("c:\script\test2.bat")    
   end If 
   If InStr(ObjShell, "7") then   
  ShellObject.Run ("c:\script\test2.bat")   
  ShellObject.Run ("c:\script\test3.bat")   
  ShellObject.Run ("c:\script\test4.bat")   
   end If
   Next
  end If 
end if
bastla
bastla 22.05.2012 um 15:08:15 Uhr
Goto Top
Hallo BADwolf!

An "Kompatibilitätsfehler " muss ich meine Zweifel anmelden. face-wink

Vielleicht fehlt ja auch nur ein einzelnes Leerzeichen - allerdings ließe sich die Zeile 5 wesentlich leichter finden, wenn Du Dich zur Verwendung der oben schon angesprochenen "Code"-Formatierung (siehe hier) entschließen könntest.

Wenn Du das mit der Zeile 5 hinbekommen hast, solltest Du auch noch über eine passende Position für ein "Next" nachdenken ...

Grüße
bastla
BADwolf
BADwolf 22.05.2012 um 15:29:32 Uhr
Goto Top
mh.. okay.. Kompilierungsfehler besteht trotzdem....Zeile 5 Zeichen 48 .. 'then' erwartet.. meint er :D ...für mich ist das then aber deutlich sichtbar ... ;D oder habe ich ein gedankenfehler???

auch mit dem jetzt eingefügten Next habe ich meine Zweifel... aber das endert nichts an dem fehler .....
bastla
bastla 22.05.2012 aktualisiert um 15:43:20 Uhr
Goto Top
Hallo BADwolf!

In der Zeile 15 wäre das "Next" wesentlich besser aufgehoben (was noch besser zu erkennen wäre, wenn Du auch noch konsequent Einrückungen verwendet hättest) ...

Grüße
bastla
BADwolf
BADwolf 22.05.2012 um 15:59:55 Uhr
Goto Top
Hallo Bastla,

vielen dank habe meinen Fehler gefunden ... eine klammer mehr zu als ich aufgemacht habe. sonst soweit alles bestens... glaub ich ;) muss ich mal testen was jetzt noch passiert ;)