iwan
Goto Top

per VBS und GPO Nutzer in Admingruppe eintragen

ich nutze die Lösung von hier:
Domain-Benutzergruppe per Script in lokale Admingruppe packen
das funktioniert auch sehr gut, aber leider nur auf deutschen Clients
nun soll das ganze aber auch auf englischen und französischen Win-Clients (2000 & XP) laufen
gibt es dazu eine Möglichkeit, die Sprachversion von Windows per VBS erst abzufragen um dann die immer gleichlautende Gruppe in die lokale Admingruppe eintragen zu lassen?
die lokale Admingruppe heissen ja dann Administratoren, Administrators und Administrateurs oder gibt es eine andere Möglichkeit, um die lokale Admingruppe anzugeben?
also quasi etwas für die Variable "strLocalGroup"?


*nachtrag 19.04.*
Thema als gelöst markiert, Lösung siehe unten

Content-ID: 56736

Url: https://administrator.de/forum/per-vbs-und-gpo-nutzer-in-admingruppe-eintragen-56736.html

Ausgedruckt am: 26.12.2024 um 12:12 Uhr

bastla
bastla 16.04.2007 um 15:15:59 Uhr
Goto Top
Hallo Iwan!

Vielleicht hilft das ...

Grüße
bastla
Iwan
Iwan 17.04.2007 um 10:55:46 Uhr
Goto Top
super, danke, damit konnte ich was anfangen face-smile

mein Skript dazu sieht nun so aus:
On Error Resume Next
Set WshNetwork = WScript.CreateObject("WScript.Network")  
strComputer = WSHNetwork.ComputerName
strDomain="WinNT://DOMÄNE/"  
strUserAdd="DOMÄNGRUPPE"  

Set net = CreateObject("Wscript.Network")  
Set objComputer = strDomain
strAdd=strDomain & strUserAdd
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colAccounts = objWMIService.ExecQuery ("Select * From Win32_Group Where SID = 'S-1-5-32-544'")  

For Each objAccount in colAccounts
   strAdminGrp = objAccount.Name
   Set objLocalGroup = GetObject("WinNT://" & strComputer & "/" & strAdminGrp)  
   objLocalGroup.Add(strAdd)
strAdminGrp & chr(13) & "Domain group added: " & strUserAdd  
Next
damit funktioniert es unter Win 2000 & XP
Biber
Biber 18.04.2007 um 08:56:10 Uhr
Goto Top
Prima, Iwan,

danke fürs Austüfteln, Testen und Posten.

THX
Biber
Iwan
Iwan 18.04.2007 um 09:53:08 Uhr
Goto Top
leider funktioniert das ganze per GPO als Startskript nicht so wirklich face-sad
die Rechner hingen teilweise bis zu 30 Minuten im Startskript fest, so das wir das Skript erstmal wieder rausnehmen mussten
das ganze wäre so einfach, wenn es nur um WinXP gehen würde....

falls jemand noch Ideen hat, dann immer her damit

*nachtrag*
so funktioniert es unter WinXP in diversen Sprachen ohne Probleme:
On Error Resume Next
Set WshNetwork = WScript.CreateObject("WScript.Network")  
strComputer = WSHNetwork.ComputerName
strUserAdd="DOMAIN-USER-GRUPPE"  
strDomain="WinNT://DOMÄNE/"  
strAdd=strDomain & strUserAdd

Set net = CreateObject("Wscript.Network")  
objComputer = strDomain

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colAccounts = objWMIService.ExecQuery ("Select * From Win32_Group Where LocalAccount = TRUE And SID = 'S-1-5-32-544'")  

For Each objAccount in colAccounts
    strAdminGrp = objAccount.Name
Next

Set objLocalGroup = GetObject("WinNT://" & strComputer & "/" & strAdminGrp)  
objLocalGroup.Add(strAdd)
leider kommt aber Win2000 mit der Abfrage bezügl. des Namen der lokalen Admingruppe nicht zurecht:
For Each objAccount in colAccounts
strAdminGrp = objAccount.Name
Next

Fehler 0x80041017 für die Zeile mit For Each
Iwan
Iwan 18.04.2007 um 12:55:48 Uhr
Goto Top
ok, jetzt hab ich es.... das For Each lief vor die Wand, weil er keine Werte bekam
nachdem das dann aber korrigiert war, lief diese Abfrage immer weiter und weiter und weiter...
ich hab das ganze dadurch abgefangen, das ich eine Abfrage auf "Admin" gemacht habe:
On Error Resume Next
Set WshNetwork = WScript.CreateObject("WScript.Network")  
strComputer = WSHNetwork.ComputerName
strUserAdd="USERGRUPPE"  
strDomain="WinNT://DOMÄNE/"  
strAdd=strDomain & strUserAdd

Set net = CreateObject("Wscript.Network")  
objComputer = strDomain

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colAccounts = objWMIService.ExecQuery ("Select * From Win32_Group Where SID = 'S-1-5-32-544'")  
For Each objItem in colAccounts
    strAdminGrp = objItem.Name
    Test = Left(strAdminGrp,5)
    If Test = "Admin" Then Exit For  
Next

Set objLocalGroup = GetObject("WinNT://" & strComputer & "/" & strAdminGrp)  
objLocalGroup.Add(strAdd)
damit sollte das Script nun nicht mehr ewig laufen
falls jemand eine bessere Filtermöglichkeit auf Lager hat, dann immer her damit
das Ergebnis muss sein, das die lokale Administratorgruppe unter Win 2000 und XP, jeweils in der Systemsprache (deutsch, englisch, französisch, etc.) in die Variable strAdmin geschrieben wird
Biber
Biber 18.04.2007 um 21:01:00 Uhr
Goto Top
Na, Iwan,

dann denke ich, ich kann Dir eine kleine Performanceverbesserung bieten...*gg

Probier bitte diese Variante Deines Schnipsels:
' On Error Resume Next 'bei mir gibt es keinen Error..  
Set WshNetwork = WScript.CreateObject("WScript.Network")  
strComputer = WSHNetwork.ComputerName
'ab hier anpassen  
strUserAdd="USERGRUPPE"  
strDomain="WinNT://DOMÄNE/"  
'bis hier anpassen  
strAdd=strDomain & strUserAdd

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
' Aufpassen, dass das Leerzeichen nach dem "_" in der nächsten Zeile da ist !!!  
Set colAccounts = objWMIService.ExecQuery _ 
  ("Select * From Win32_Group Where Domain ='" & strComputer & "' and SID = 'S-1-5-32-544'")  
For Each objItem in colAccounts
       strAdminGrp = objItem.Name
    ' die nächsten Zeilen nur zum Testen  
    Wscript.echo "Name.......:" & objItem.Name      
    Wscript.echo "Caption....:" & objItem.Caption  
    Wscript.echo "Description:" & objItem.Description  
 '   Wscript.echo "Domain.....:" & objItem.Domain     ' ist der COMPUTERNAME, wissen wir  
 '   Wscript.echo "InstallDate:" & objItem.InstallDate     ' bei M$ immer leer *gg  
 '   Wscript.echo "SID........:" & objItem.SID   ' wissen wir; steht in der WHERE-Clause  
 '   Wscript.echo "SIDType....." & objItem.SidType   ' sollte immer 4 sein  
 '   Wscript.echo "Status.....:" & objItem.Status    
                     ' "Status" sollte immer "OK" sein, wenn nicht: forget it   
Next
' ------Die nächsten beiden Zeilen später scharfschalten, brauchen wir nicht zum Testen  
'-----Set objLocalGroup = GetObject("WinNT://" & strComputer & "/" & strAdminGrp)  
'------objLocalGroup.Add(strAdd)  

Damit solltest Du den Namen Deiner lokalen Admingruppe in 5 sec haben.

Gruss
Biber
Iwan
Iwan 19.04.2007 um 08:16:51 Uhr
Goto Top
klasse, Biber, läuft einwandfrei auf meinen Testsystemen (Win XP und ein virtuelles Win2000) face-smile
leider hat gestern morgen eine "Beta"-Version für ca. 15 Minuten etliche PCs lahmgelegt (sie hingen im Startskript fest)
das fanden die Chefs nicht wirklich toll und daher hat man sich gegen eine weitere Skriptnutzung entschieden
nun dürfen die Supporter das in ihrer Location per Hand (remote) machen
naja, andere Firmen, andere Sitten...


PS: das mit dem On Error Resume Next ist deshalb drin, weil eine Meldung kommt, wenn die Gruppe schon in der Admingruppe eingetragen ist face-wink
Biber
Biber 19.04.2007 um 08:50:45 Uhr
Goto Top
Moin Iwan,

dann würde ich empfehlen, dass Du noch mal zu Deinen Chefs rennst und denen sagst, dass in der gestrigen Version des Skripts ein Bug war, der inzwischen behoben ist.

Und dieser Bug ist dadurch entstanden, dass Du dummerweise eine Musterlösung von der einzig autorisierten Scriptingseite des sympatischen Weltmarktführers höchstselbst verwendet hast.
Oder für Cheffes besser verständlich, argumentierst Du:
"Nicht alle Scripts=böse, sondern ich, Iwan, habe den Fehler in der Version 1.00 innerhalb von ein paar Stunden lokalisiert, ausgemerzt und die Performance um 8700% gesteigert.
Außerdem werden wir aus diesen Erfahrungen lernen, dass wir vor jedem flächendeckenden produktiven Einsatz einen mindestens dreitägigen Testlauf mit x Rechnern machen. Erst danach werden domänenweite Änderungen eingepflegt. Dieses wäre jedenfalls mein Verbesserungsvorschlag..."


Und zu Deinem P.S.
PS: das mit dem On Error Resume Next ist deshalb drin, weil eine Meldung kommt, wenn die Gruppe schon in der Admingruppe eingetragen ist ..

Das war auch mehr ein Scherz, dass bei mir keine Fehler kommen.
In der PROD-Version würde ich natürlich ein "On Error Resume Next" einbauen.
Aber in der TEST-Version will ich alle Fehler sehen ohne Schnickschnack.

Gruss
Biber
Iwan
Iwan 19.04.2007 um 11:17:02 Uhr
Goto Top
den Chefs ist das nun egal und die Supporter sind leider die Dummen dank der Mehrarbeit
es war zum Glück kein flächendeckender Ausfall, sondern lediglich hier vor Ort an ca. 20 PCs
die standen halt mal etwas länger im Startskript-Bildschirm... shit happens :-P
ich hab das Skript ja an diversen PCs hier getestet und es lief einwandfrei, sonst hätten wir es erst gar nicht eingepflanzt
naja, was solls... nun hab ich wieder mal etwas VBS gelernt und nen schönes Skript, falls die Chefs es sich doch noch anders überlegen face-wink