Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst VBScript - Gruppen Abfragen eines Windows Server (AD)

Mitglied: micneu

micneu (Level 2) - Jetzt verbinden

09.02.2011 um 15:12 Uhr, 7306 Aufrufe, 11 Kommentare

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?

01.
Option Explicit
02.
Dim arNETLW, iz, zaehler, X64
03.
Dim FSO, NetLW, colDrives, objNetwork, Network, USERNAME
04.
Set FSO = CreateObject("Scripting.FileSystemObject")
05.
Set Network = Wscript.CreateObject("Wscript.Network")
06.

07.
ShowPrinter
08.
' Drucker zuweisung 
09.
	if ValidateADGroup("Drucker 1") Then
10.
		PrinterPath = "\\SBSSERVER\Drucker 1"
11.
		PrinterDriver = "HP Universal Printing PS"
12.
		Network.AddWindowsPrinterConnection PrinterPath, PrinterDriver
13.
	End If	
14.
	if ValidateADGroup("Drucker 1 STD") Then
15.
		Network.SetDefaultPrinter "\\SBSSERVER\Drucker 1"
16.
	End If
17.
	
18.
Function ShowPrinter()
19.
	wscript.echo "ShowPrinter"
20.
	Dim strComputer, objWMIService, colInstalledPrinters, objPrinter
21.
	strComputer = "localhost"
22.
	Set objWMIService = GetObject("winmgmts:" _
23.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
24.
	Set colInstalledPrinters =  objWMIService.ExecQuery _
25.
    ("Select * from Win32_Printer")
26.
	
27.
	For Each objPrinter In colInstalledPrinters
28.
		If InStr(1, objPrinter.Name, "\\", 1) Then
29.
			WScript.Echo "Name: " & objPrinter.Name
30.
		End If		
31.
	Next
32.
End Function
33.

34.
' Abfrage der AD Gruppen
35.
Function ValidateADGroup(AD_PACKAGE_GROUP) 
36.
	Dim message 
37.
	Dim objADSysInfo : Set objADSysInfo = CreateObject("ADSystemInfo") 
38.
	Dim strUser : strUser = objADSysInfo.UserName 
39.
	Dim strGroup 
40.
	Dim objGroup 
41.
	Dim objUser : Set objUser = GetObject("LDAP://" & strUser) 
42.
	For Each strGroup in objUser.memberOf 
43.
		Set objGroup = GetObject("LDAP://" & strGroup) 
44.
		If InStr(objGroup.CN, AD_PACKAGE_GROUP) <> 0 Then 
45.
			ValidateADGroup = True 
46.
			Set objGroup = nothing 
47.
			Exit Function
48.
		Else 
49.
			ValidateADGroup = False 
50.
			Set objGroup = nothing 
51.
		End If
52.
	Next 
53.
End Function
kann ich die zeile 44 so verändern das eine art or bedingung security groups mit abfragt?
könnte es so gehen?
01.
If InStr(objGroup.CN, AD_PACKAGE_GROUP or ADS_GROUP_TYPE_SECURITY) <> 0 Then 
oder muss die funktion komplett neu geschrieben werden?

gruß michael
Mitglied: 60730
09.02.2011 um 15:30 Uhr
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ß
Bitte warten ..
Mitglied: bastla
09.02.2011 um 15:32 Uhr
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
#Gruppe1#Gruppe2#Gruppe3#
zusammenfassen und dann die "InStr"-Abfrage umkehren:
If InStr(AD_PACKAGE_GROUP, "#" & objGroup.CN & "#") <> 0 Then  
Grüße
bastla
Bitte warten ..
Mitglied: micneu
09.02.2011 um 15:49 Uhr
Hallo bastla,

ich habe das netzt übernommen und es waren schon einige gruppen angelegt.
Mir wurde vorgegeben das z.b.:
LW x: ist netzlaufwerk \\sbsserver\bla1
LW z: ist netzlaufwerk \\sbsserver\bla2

diese laufwerke bekommen alle die in der gruppe HUSTEN sind.

und für die Drucker Sollte ich unter Security Groups, eine Gruppe "Drucker 1", "Drucker 2" usw. einrichten
der Gruppenbereich ist bei allen "Global" und Gruppentyp ist Sicherheit"

Ist jetzt ein User in der Gruppe "Drucker 1" bekommt er den auch zugewiesen als Standard drucker.
hoffe es ist jetzt verständlicher

jetzt frage ich noch anderst, wie kann ich in vbscript abfragen welchen typ eine gruppe ist?

gruß michael
Bitte warten ..
Mitglied: micneu
09.02.2011 um 16:02 Uhr
kann es was damit zu tun haben wo meine gruppe im ad liegt?

hier ein beispiel:

domain.local/MyBusiness/Security Groups/Drucker/Drucker 1
domain.local/MyBusiness/Users/SBSUsers/HUSTEN

husten klappt für die netzlaufwerke, nur drucker 1 ja nicht.

gruß michael
Bitte warten ..
Mitglied: 60730
09.02.2011 um 17:33 Uhr
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.
Bitte warten ..
Mitglied: bastla
09.02.2011 um 19:15 Uhr
Hallo micneu!
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:
01.
strUser = CreateObject("ADSystemInfo").UserName
02.
Groups = "Gruppen:"
03.
For Each strGroup in GetObject("LDAP://" & strUser).memberOf 
04.
    Groups = Groups & vbCrLf & GetObject("LDAP://" & strGroup).cn
05.
Next 
06.
WScript.Echo Groups
Grüße
bastla
Bitte warten ..
Mitglied: DerWoWusste
12.02.2011 um 16:39 Uhr
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).
Bitte warten ..
Mitglied: micneu
19.04.2011 um 10:51 Uhr
Hallo Leute,

habe jetzt eine lösung.

Hier mein code:
01.
' Login.vbs
02.
' Login script mit Gruppenabfrage und Drucker zuweisung
03.
' michael.neumann@itech-consulting.net
04.
' Kunde: Teravolt / QTom
05.
' Stand: 21.02.2011
06.
' ====================================================
07.
' Deklaration der Variablen
08.
Option Explicit
09.
Dim arNETLW, iz, zaehler, X64
10.
Dim FSO, NetLW, colDrives, objNetwork, Network, USERNAME
11.
Dim PrinterPath, PrinterDriver, AD_GRP_1, AD_GRP_2, PRINTER_PATH, PRINTER_DRV
12.
Set FSO = CreateObject("Scripting.FileSystemObject")
13.
Set Network = Wscript.CreateObject("Wscript.Network")
14.

15.
On Error Resume Next
16.
	Dim WshShell
17.
	Dim OsType
18.
	
19.
	Set WshShell = CreateObject("WScript.Shell")
20.
	OsType = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")
21.
	If OsType = "x86" then
22.
		'wscript.echo "Windows 32bit system detected"
23.
		X64 = "NO"
24.
	elseif OsType = "AMD64" then
25.
		'wscript.echo "Windows 64bit system detected"
26.
		X64 = "YES"		
27.
	end if
28.

29.
IF X64 = "YES" THEN
30.
	'NICHTS
31.
ELSE
32.
	'ShowPrinter
33.
	RemoveNetPrinter	
34.
'	SW-MFP-PS
35.
	NetUsePrinters "SW-MFP-PS","SW-MFP-PS_STD","\\SRV-01\SW-MFP-PS","HP Universal Printing PS"
36.
'	PCenter SW PS
37.
	NetUsePrinters "PCenter-SW-PS","PCenter-SW-PS_STD","\\SRV-01\PCenter-SW-PS","HP Universal Printing PS"	
38.
'	PCenter SW PCL6
39.
	NetUsePrinters "PCenter-SW-PCL6","PCenter-SW-PCL6_STD","\\SRV-01\PCenter-SW-PCL6","HP Universal Printing PCL6"
40.
	ShowPrinter
41.
END IF
42.

43.
Function ShowPrinter	
44.
	Dim strComputer, objWMIService, colInstalledPrinters, objPrinter
45.
	strComputer = "localhost"
46.
	Set objWMIService = GetObject("winmgmts:" _
47.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
48.
	Set colInstalledPrinters =  objWMIService.ExecQuery _
49.
    ("Select * from Win32_Printer")
50.
	
51.
	For Each objPrinter In colInstalledPrinters
52.
		If InStr(1, objPrinter.Name, "\\", 1) Then
53.
			WScript.Echo "Name: " & objPrinter.Name
54.
		End If		
55.
	Next
56.
End Function
57.

58.
' Abfrage der AD Gruppen
59.
Function ValidateADGroup(AD_PACKAGE_GROUP) 
60.
	Dim message 
61.
	Dim objADSysInfo : Set objADSysInfo = CreateObject("ADSystemInfo") 
62.
	Dim strUser : strUser = objADSysInfo.UserName 
63.
	Dim strGroup 
64.
	Dim objGroup 
65.
	Dim objUser : Set objUser = GetObject("LDAP://" & strUser) 
66.
	For Each strGroup in objUser.memberOf 
67.
		Set objGroup = GetObject("LDAP://" & strGroup) 
68.
		If InStr(objGroup.CN, AD_PACKAGE_GROUP) <> 0 Then 
69.
			ValidateADGroup = True 
70.
			Set objGroup = nothing 
71.
			Exit Function
72.
		Else 
73.
			ValidateADGroup = False 
74.
			Set objGroup = nothing 
75.
		End If
76.
	Next 
77.
End Function
78.

79.
Function NetUsePrinters(AD_GRP_1,AD_GRP_2,PRINTER_PATH,PRINTER_DRV)
80.
	if ValidateADGroup(AD_GRP_1) Then
81.
		PrinterPath = PRINTER_PATH
82.
		PrinterDriver = PRINTER_DRV		
83.
		Network.AddWindowsPrinterConnection PrinterPath, PrinterDriver		
84.
	ELSE
85.
		' nichts		
86.
	End If
87.
	if ValidateADGroup(AD_GRP_2) Then	
88.
		Network.SetDefaultPrinter PrinterPath
89.
	ELSE
90.
		' nichts		
91.
	End If
92.
End Function
93.

94.
Function RemoveNetPrinter
95.
	wscript.echo "RemoveNetPrinter"
96.
	Dim strComputer, objWMIService, colInstalledPrinters, objPrinter
97.
	strComputer = "localhost"
98.
	Set objWMIService = GetObject("winmgmts:" _
99.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
100.
	Set colInstalledPrinters =  objWMIService.ExecQuery _
101.
    ("Select * from Win32_Printer")
102.
	
103.
	For Each objPrinter In colInstalledPrinters
104.
		' Sucht drucker die mit "\\" anfangen
105.
		If InStr(1, objPrinter.Name, "\\", 1) Then			
106.
			Network.RemovePrinterConnection + objPrinter.Name
107.
		End If		
108.
	Next
109.
End Function
Bitte warten ..
Mitglied: DerWoWusste
19.04.2011 um 13:08 Uhr
Und wie machst Du das bei schwachen Benutzern? Haben alle Adminrechte UND die UAC ist aus? Nur dann läuft Dein Skript (in Standardeinstellungen).
Bitte warten ..
Mitglied: micneu
26.04.2011 um 15:26 Uhr
getestet hatte ich es unter windows xp sp3 und die benutzer hatten nur benutzerechte.
mit windows vista und windows 7 hatte ich es nicht getestet.

die user waren entsprechend in den gruppern der drucker drinn.

habe kein zugriff mehr auf die domain in der ich das erstellt habe, kann es deshalb nicht mehr testen.
hast du eine gpo erstell in dem du das script beim anmelden ausführst?

gruß michael
Bitte warten ..
Mitglied: DerWoWusste
26.04.2011 um 15:32 Uhr
Es wird unter Win7 nicht laufen.
Ich nutze keine Skripte sondern die GPO-interne Druckerzuweisung, die DCs ab 2003 R2 verfügbar machen, sobald die Rolle Druckserver installiert ist.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

VBscript - WMI - ServerAddress + ConnectionStatus (Windows 7)

gelöst Frage von Highend01Batch & Shell10 Kommentare

Hi zusammen, ich kann "ServerAddress" + "ConnectionStatus" für eine VPN-Verbindung allein durch ihren Namen (z.B. "Work VPN") unter Windows ...

Windows 7

Windows 7: Per VBScript Netzwerkdrucker ersetzen

Frage von donnyS73lbWindows 71 Kommentar

Hallo zusammen, ich habe folgendes vor: Ich möchte ein VBScript schreiben, dass mit Hilfe eines speziellen Domänenusers auf dem ...

Microsoft Office

Outlook VBScript

gelöst Frage von NebellichtMicrosoft Office5 Kommentare

Hallo, seit ein paar Wochen werden keine VBScripte hinter den (Benutzerspezifschen) Outlook Formularen ausgeführt. Hat jemand eine Lösung parat ...

VB for Applications

VBScript und OR

gelöst Frage von InvisanVB for Applications5 Kommentare

Hi zusammen, derzeit bastel ich ein bisschen in VBScript rum. Leider habe ich mit dem OR Operator einige Probleme. ...

Neue Wissensbeiträge
Microsoft
PowerShell script für LAPS
Information von kgborn vor 18 StundenMicrosoft2 Kommentare

Kurzer Hinweis für Admins im AD-Umfeld. Ich bin die Tage auf das PowerShell Script der Woche “Local Administrator Password ...

Windows 10
Windows 10 bis Version 1803 und das Zwangs-Upgrade
Information von kgborn vor 18 StundenWindows 10

Ich denke, die meisten Admins hier werden Systeme mit Windows 10 Enterprise einsetzen und Updates per WSUS/SCCM oder ähnlichem ...

Microsoft Office
BSI-Empfehlungen für die Office-Konfiguration
Information von kgborn vor 18 StundenMicrosoft Office

Kurze Information für Admins, die Office verwalten. Das BSI hat einige Regeln für die Absicherung von Office-Konfigurationen veröffentlicht. Ich ...

Windows 10

Sandy-Bridge plus Nvidia plus Win10 1903 braucht Hotfix

Information von DerWoWusste vor 5 TagenWindows 101 Kommentar

Es gibt ein Problem in der seltenen Konstellation Nvidia-Grafikkarte/Sandy-Bridge-CPU/Win10v1903: die von Nvidia vorgeschlagenen Treiber lassen sich nicht installieren. verlinkt ...

Heiß diskutierte Inhalte
Batch & Shell
Powershell Skript für Reg Datei ändern
gelöst Frage von SoccerdeluxBatch & Shell16 Kommentare

Hallo zusammen, ich muss auf einem Windows 10 Pc ein Skript ausführen lassen was sich alle 5 Minuten wiederholt. ...

LAN, WAN, Wireless
WLAN in Veranstaltungshalle
Frage von coltseaversLAN, WAN, Wireless14 Kommentare

Hallo zusammen, für eine Halle mit 1300 m² suche ich derzeit nach einer WLAN-Hotspot-Lösung für bis zu 500 User ...

Windows 10
Windows 10 Logonskript greift nicht
Frage von xbast1xWindows 1013 Kommentare

Hallo zusammen, da sich die per GPO gemappten Laufwerke bei allen Usern schließen und das Problem sich nicht lösen ...

LAN, WAN, Wireless
Eigenes LAN mit WLAN (Internet) vom Nachbarn verbinden
Frage von kaniggelLAN, WAN, Wireless12 Kommentare

Hallo, mein Provider hat mir den DSL-Anschluss gekappt. Wie kann ich bis das wieder funktioniert mein LAN mit dem ...