VBScript - Gruppen Abfragen eines Windows Server (AD)
Hallo Leute,
ich habe ein script in VBScript geschrieben und habe jetzt nur ein kleines Problem:
Ich kann die Security Groups nicht abfragen.
Also das ziel ist es das alle Domain user über die Gruppen zugehörigkeit ihren Drucker zugewisen bekommen.
Für Netzlaufwerke habe ich es schon hinbekommen, dort nutze ich auch Gruppen, für die Drucker habe ich aber Security Groups genommen.
Wie kann ich das abfragen, hier mein script:
Ab Zeile 34 werte ich die Gruppen aus, wie kann ich es jetzt einbauen das er auch die Security Groups auswertet?
kann ich die zeile 44 so verändern das eine art or bedingung security groups mit abfragt?
könnte es so gehen?
oder muss die funktion komplett neu geschrieben werden?
gruß michael
ich habe ein script in VBScript geschrieben und habe jetzt nur ein kleines Problem:
Ich kann die Security Groups nicht abfragen.
Also das ziel ist es das alle Domain user über die Gruppen zugehörigkeit ihren Drucker zugewisen bekommen.
Für Netzlaufwerke habe ich es schon hinbekommen, dort nutze ich auch Gruppen, für die Drucker habe ich aber Security Groups genommen.
Wie kann ich das abfragen, hier mein script:
Ab Zeile 34 werte ich die Gruppen aus, wie kann ich es jetzt einbauen das er auch die Security Groups auswertet?
Option Explicit
Dim arNETLW, iz, zaehler, X64
Dim FSO, NetLW, colDrives, objNetwork, Network, USERNAME
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Network = Wscript.CreateObject("Wscript.Network")
ShowPrinter
' Drucker zuweisung
if ValidateADGroup("Drucker 1") Then
PrinterPath = "\\SBSSERVER\Drucker 1"
PrinterDriver = "HP Universal Printing PS"
Network.AddWindowsPrinterConnection PrinterPath, PrinterDriver
End If
if ValidateADGroup("Drucker 1 STD") Then
Network.SetDefaultPrinter "\\SBSSERVER\Drucker 1"
End If
Function ShowPrinter()
wscript.echo "ShowPrinter"
Dim strComputer, objWMIService, colInstalledPrinters, objPrinter
strComputer = "localhost"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objPrinter In colInstalledPrinters
If InStr(1, objPrinter.Name, "\\", 1) Then
WScript.Echo "Name: " & objPrinter.Name
End If
Next
End Function
' Abfrage der AD Gruppen
Function ValidateADGroup(AD_PACKAGE_GROUP)
Dim message
Dim objADSysInfo : Set objADSysInfo = CreateObject("ADSystemInfo")
Dim strUser : strUser = objADSysInfo.UserName
Dim strGroup
Dim objGroup
Dim objUser : Set objUser = GetObject("LDAP://" & strUser)
For Each strGroup in objUser.memberOf
Set objGroup = GetObject("LDAP://" & strGroup)
If InStr(objGroup.CN, AD_PACKAGE_GROUP) <> 0 Then
ValidateADGroup = True
Set objGroup = nothing
Exit Function
Else
ValidateADGroup = False
Set objGroup = nothing
End If
Next
End Function
kann ich die zeile 44 so verändern das eine art or bedingung security groups mit abfragt?
könnte es so gehen?
If InStr(objGroup.CN, AD_PACKAGE_GROUP or ADS_GROUP_TYPE_SECURITY) <> 0 Then
oder muss die funktion komplett neu geschrieben werden?
gruß michael
Please also mark the comments that contributed to the solution of the article
Content-ID: 160463
Url: https://administrator.de/contentid/160463
Printed on: December 14, 2024 at 01:12 o'clock
11 Comments
Latest comment
Salü,
ganz dumme Gegenfrage - wenn du schreibst für die Drucker nimmst du aber Security Groups - was hast du für die Netzwerklaufwerke genommen?
Distributiongroups?
Die Frage, warum so was "banales" wie ein Loginscript mit VBS zu schreiben, verkneife ich mir
Gruß
ganz dumme Gegenfrage - wenn du schreibst für die Drucker nimmst du aber Security Groups - was hast du für die Netzwerklaufwerke genommen?
Distributiongroups?
Die Frage, warum so was "banales" wie ein Loginscript mit VBS zu schreiben, verkneife ich mir
Gruß
Hallo micneu!
Was verstehst Du in diesem Fall unter "Security Group"?
Abgesehen davon prüft Deine Function die Mitgliedschaft bei der als Parameter übergebenen Gruppe - wenn mehrere Gruppenmitgliedschaften geprüft werden sollen, musst Du die Function mehrmals aufrufen oder eben alle zu prüfenden Gruppen übergeben.
Um mehrere Gruppen mit einmaligem Einlesen der Mitgliedschaften prüfen zu können, würde ich sie in einem String nach dem Muster
zusammenfassen und dann die "
<code type="plain"">If InStr(AD_PACKAGE_GROUP, "#" & objGroup.CN & "#") <> 0 Then
Grüße
bastla
Was verstehst Du in diesem Fall unter "Security Group"?
Abgesehen davon prüft Deine Function die Mitgliedschaft bei der als Parameter übergebenen Gruppe - wenn mehrere Gruppenmitgliedschaften geprüft werden sollen, musst Du die Function mehrmals aufrufen oder eben alle zu prüfenden Gruppen übergeben.
Um mehrere Gruppen mit einmaligem Einlesen der Mitgliedschaften prüfen zu können, würde ich sie in einem String nach dem Muster
#Gruppe1#Gruppe2#Gruppe3#
InStr
"-Abfrage umkehren:<code type="plain"">If InStr(AD_PACKAGE_GROUP, "#" & objGroup.CN & "#") <> 0 Then
Grüße
bastla
Moin,
ganz kurz, weil jetzt das Kinderl dran ist..
Es gibt Verteilergruppen - Sicherheitsgruppen und Organsationseinheiten....
Nur bei AD Abfragen der Ous sind die Orte, wo die hingelegt wurden interessant...
Von daher bitte beantworte doch mal meine großgeschriebene und Bastlas Frage nach "welcher Zusammenhang Sicherheitsgruppe" denn mit der Problematik zu tun hat.
Sorry mehr Zeit hab ich jetzt nicht, aber der eigene Genpool geht vor.
ganz kurz, weil jetzt das Kinderl dran ist..
Es gibt Verteilergruppen - Sicherheitsgruppen und Organsationseinheiten....
Nur bei AD Abfragen der Ous sind die Orte, wo die hingelegt wurden interessant...
Von daher bitte beantworte doch mal meine großgeschriebene und Bastlas Frage nach "welcher Zusammenhang Sicherheitsgruppe" denn mit der Problematik zu tun hat.
Sorry mehr Zeit hab ich jetzt nicht, aber der eigene Genpool geht vor.
Hallo micneu!
Wenn Du einfach einmal nur die (direkte) Gruppenmitgliedschaft kontrollieren willst:
Grüße
bastla
jetzt frage ich noch anderst, wie kann ich in vbscript abfragen welchen typ eine gruppe ist?
Brauchst Du nicht, wenn Du ohnehin nur Sicherheitsgruppen verwendest.husten klappt für die netzlaufwerke, nur drucker 1 ja nicht.
Lässt sich "klappt nicht" noch etwas näher ausführen (etwa mittels einer Fehlermeldung)?Wenn Du einfach einmal nur die (direkte) Gruppenmitgliedschaft kontrollieren willst:
strUser = CreateObject("ADSystemInfo").UserName
Groups = "Gruppen:"
For Each strGroup in GetObject("LDAP://" & strUser).memberOf
Groups = Groups & vbCrLf & GetObject("LDAP://" & strGroup).cn
Next
WScript.Echo Groups
bastla
Lass mal bitte kurz schauen, wie Dein Konzept aussieht, wenn Du Folgendes in Betracht ziehst:
Nur Admins oder (in winxp) Hauptbenutzer können Drucker installieren, somit ist ohne Änderungen von einstellungen nur eine Zuweisung an Computerobjekte möglich. Das macht man wiederum am besten über GPOs (möglich ab 2003 R2 DCs), es sei denn man möchte wirklich Benutzern zuweisen (die an mehreren Rechnern sitzen und unabhängig vom Standort die selben Drucker haben sollen, während andere am selben Rechner auch andere Drucker bekommen sollen).
Nur Admins oder (in winxp) Hauptbenutzer können Drucker installieren, somit ist ohne Änderungen von einstellungen nur eine Zuweisung an Computerobjekte möglich. Das macht man wiederum am besten über GPOs (möglich ab 2003 R2 DCs), es sei denn man möchte wirklich Benutzern zuweisen (die an mehreren Rechnern sitzen und unabhängig vom Standort die selben Drucker haben sollen, während andere am selben Rechner auch andere Drucker bekommen sollen).