Jump to content

Druckerzuweisung mit ADS-Gruppen, VBS


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hi,

ich Bastel gerade an der möglichkeit mit ADS Gruppen, die eine bestimmt Form haben Drucker per VBS Skript für User zu Verbinden. Die ADS Gruppen sind so aufgebaut das am Anfang "Drucker_" steht, danach der Freigabename kommt "HP-CLJ6-01" und dann noch ein Ende "_Server1". Die Gruppen stehen alle in einer OU!

 

Beispielsname der Gruppe" Drucker_HP-CLJ6-01_Server1".

Der Printserver ist immer gleich.

 

Ich hatte also vor in einer Schleife zu überprüfen ob der User in einer der Gruppen ist, dann aus der Gruppe den Druckernamen "Herauszufiltern" und zu Verbinden.

Hat vieleicht jemand schonmal so etwas geschrieben? Ich bekomme es nicht hin die User auszulesen um den Gruppennamen zu bekommen.

 

Danke und Gruß

Tobi

Link zu diesem Kommentar

Mal'n paar Funktionen zum NThema User und Gruppen:

Function GetUserID()
On Error Resume Next
strUser = WshProcEnv("UserName")
if strUser = "" then strUser = WshNetwork.UserName ' won't work with cscript login
GetUserID = strUser
End Function

Function GetGroups(strDomain,strUserID)
Set objUser = GetObject("WinNT://" & strDomain & "/" & strUserID)
GetGroups=""
For Each objGroup In objUser.Groups 
	GetGroups=GetGroups & "[" & UCase(objGroup.Name) & "]"
Next
End Function

Function InGroup(strGroup)
InGroup=False
If InStr(MyGroups,"[" & UCase(strGroup) & "]") Then
	InGroup=True
End If
End Function

 

EDIT: Am Anfang noch:

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshProcEnv = WshShell.Environment("Process")

Link zu diesem Kommentar

Hi,

danke erstmal für die Beispiele. Ich habe bis jetzt folgendes:

 

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshProcEnv = WshShell.Environment("Process")

 

On Error Resume Next

Set objOU = GetObject("LDAP://OU=Drucker,OU=Print,DC=beispiel,DC=de")

objOU.Filter = Array("group")

 

For Each objUser in objOU

Drucker = Mid(objUser.Name,11,14)

 

Set objGroup = GetObject("LDAP://" & objUser.Name & ",OU=Drucker,OU=Print,DC=beispiel,DC=de")

For each objMember in objGroup.Members

Wscript.Echo objMember.Name

Next

 

Wscript.Echo Drucker

 

Next

 

Was noch nicht funktioniert: Ich bekomme bei den Gruppennamen die ersten Zeichen weg damit man nur den Druckernamen hat, leider sind diese aber unterschiedlich lang. Dadurch kann ich das _Server1 am Ende der Gruppe nicht richtig entfernen.

 

Danke und Gruß

Tobi

Link zu diesem Kommentar

Hi Tobi,

 

anbei ein Ausschnitt meines Anmeldscripts.

Im Vorfeld werden alle möglichen Paramter abgefragt bzw. festgelegt.

Im Grunde ist es doch eigentlich egal wie lange der Gruppenname ist.

Ich habe hier für alle Hostnamen aller Endgeräte einheitliche Längen.

Musst eben an den richtigen Stellen deine Gruppen und Freigaben angeben.

 

 

Set WSHNetwork = WScript.CreateObject("WScript.Network")

Set WSHShell = WScript.CreateObject("WScript.Shell")

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objNetwork = WScript.CreateObject("WScript.Network")

Set objShell = WScript.CreateObject("WScript.Shell")

strUserDesktop = objShell.SpecialFolders.Item("Desktop")

strUserStartup = objShell.SpecialFolders.Item("Startup")

strUserFavorites = objShell.SpecialFolders.Item("Favorites")

Set colEnvironmentVariables = objShell.Environment("Volatile")

strUserFolder = colEnvironmentVariables.Item("APPDATA") & "\Microsoft\Internet Explorer\Quick Launch"

 

Const OverwriteExisting = TRUE

Const OverWriteFiles = TRUE

 

On Error Resume Next

 

Domain = WSHNetwork.UserDomain

UserName = ""

 

While UserName = ""

UserName = WSHNetwork.UserName

MyGroups = GetGroups(Domain, UserName)

Wend

 

While ComputerName = ""

ComputerName = WSHNetwork.ComputerName

Wend

''*********************************************************************************

''Function:", GetGroups

''*********************************************************************************

 

Function GetGroups(Domain, UserName)

Set objUser = GetObject("WinNT://" & Domain & "/" & UserName)

GetGroups=""

For Each objGroup In objUser.Groups

GetGroups=GetGroups & "[" & UCase(objGroup.Name) & "]"

Next

End Function

 

''********************************************************************************

''Function:", InGroup

''********************************************************************************

 

Function InGroup(strGroup)

InGroup=False

If InStr(MyGroups,"[" & UCase(strGroup) & "]") Then

InGroup=True

End If

End Function

 

 

'Hier werden die Drucker über die Zugehörigkeit der Gruppe "Drucker1" zugewiesen.

'und als Standarddrucker eingestellt.

 

objNetwork.RemovePrinterConnection "\\SERVER\DRUCKER1"

If INGROUP ("DRUCKER1") Then

WshNetwork.AddWindowsPrinterConnection "\\SERVER\DRUCKER1"

WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER1"

End If

 

objNetwork.RemovePrinterConnection "\\SERVER\DRUCKER2"

If INGROUP ("DRUCKER2") Then

WshNetwork.AddWindowsPrinterConnection "\\SERVER\DRUCKER2"

WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER2"

End If

 

'Hier wird dem jeweiligen User in Abhängikeit an welchem PC er sich anmeldet zugwiesen.

If UCase(UserName) = "Meier1" Then

If UCase (ComputerName) = "PC4711" Then

WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER1"

End If

If UCase (ComputerName) = "PC4712" Then

WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER2"

End If

End If

 

If UCase(UserName) = "Mueller1" Then

If UCase (ComputerName) = "PC4711" Then

WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER1"

End If

If UCase (ComputerName) = "PC4712" Then

WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER2"

End If

End If

Link zu diesem Kommentar

Hi,

erstmal danke für die Tips. Das Druckerskript habe ich jetzt fertig, füge es unten mit ein. Allerdings wollte ich jetzt das ganze noch für Netzlaufwerke nutzen wo einfach eine Gruppenmitgliedschaft abgefragt wird. Bei KIX wurden auch die Vererbten Gruppen berücksichtigt, wenn ich das ganze mit dem Beispiel unten "IF INGROUP" mache funktioniert dies nur wenn direkt User in der Gruppe stehen! Es kann aber bei uns vorkommen das bis zu 3 Gruppen untereinander Verbunden sind, also in der dritten Gruppe der User steht. Hat vieleicht dort jemand eine Idee? :confused:

 

Danke und Gruß

Tobi

 

'----------------------------------------------------------

'Instanzieren des Windows Scripting Hosts

'----------------------------------------------------------

Set Network = CreateObject("Wscript.Network")

 

'----------------------------------------------------------

'Löschen eventuell bestehender Printerconnections

'----------------------------------------------------------

For i = 0 To network.EnumPrinterConnections.Count - 1

On Error Resume Next

network.RemovePrinterConnection network.EnumPrinterConnections.Item(i)

Next

 

On Error Resume Next

 

'----------------------------------------------------------

'Verbinden der Netzwerkdrucker mit dem Gruppennamen

'----------------------------------------------------------

 

Set objADSysInfo = CreateObject("ADSystemInfo")

strUser = objADSysInfo.UserName

Set objUser = GetObject("LDAP://" & strUser)

For Each strGroup In objUser.memberOf

Set objGroup = GetObject("LDAP://" & strGroup)

'WScript.Echo objGroup.CN

Drucker = Mid(objGroup.CN,1,5)

 

If Drucker = "Print" Then

'MsgBox objGroup.cn

Dim Druckername, SuchZeichen, PositionEnde,TeilMitte,printname

Druckername = objGroup.cn

SuchZeichen="User"

PositionEnde = InStr(6, Druckername, SuchZeichen, 1)

TeilMitte = PositionEnde - 8

'MsgBox TeilMitte

printname = Mid(objGroup.CN, 7, TeilMitte)

'MsgBox printname

 

Set WshNetwork = CreateObject("WScript.Network")

WshNetwork.AddWindowsPrinterConnection "\\printserver\" & printname

 

End If

Next

Link zu diesem Kommentar

Hi Tobi,

 

 

etwa so..

 

If INGROUP("Gruppe1") OR INGROUP("Gruppe2") OR INGROUP("Gruppe3") Then

wshnet.MapNetworkDrive "G:", "\\Server\Freigabe"

End If

 

die Funktion IF INGROUP ist aus meinem ersten Scipt zu nehmen..

 

Gruß Sigi

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...