Jump to content
Sign in to follow this  
(DR)NO

Druckerzuweisung mit ADS-Gruppen, VBS

Recommended Posts

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

Share this post


Link to post
Share on other sites

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")

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Hi,

leider kann ich die Gruppen nicht benennen im Skript da wir viel mit Berechtigungsblöcken in Form von Gruppen arbeiten. In Kixtart wurde ja auch eine Vererbung berücksichtigt, funktioniert dies in VBS nicht?

 

Danke und Gruß

Tobi

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...