#46715 - 2003-10-23 01:19 PM
Re: Create AD Global Groups for printer objects
|
Howard Bullock
KiX Supporter
Registered: 2000-09-15
Posts: 5809
Loc: Harrisburg, PA USA
|
I have looked at this UDF several times and can not see anything I did incorrectly. That said, I hope someone finds a small proggie error so that this can be concluded for everyone wanting to use this UDF. But I am going to write this up in Perl today to see if the behavior is different. [ 23. October 2003, 13:20: Message edited by: Howard Bullock ]
|
Top
|
|
|
|
#46717 - 2003-10-23 02:28 PM
Re: Create AD Global Groups for printer objects
|
Howard Bullock
KiX Supporter
Registered: 2000-09-15
Posts: 5809
Loc: Harrisburg, PA USA
|
Thank you very much Shawn. The extra set of eyes was definitely needed.
Tested with the example code and ALL groups are properly created.
With the invalid $SamAccountName variable each group was trying to set the same SamAccountName "Null" which must be unique. I will immediatley correct this in the UDF Library.
Thank again!.
[edit] This makes me feel a little sheepish. [/edit] [ 23. October 2003, 14:43: Message edited by: Howard Bullock ]
|
Top
|
|
|
|
#46719 - 2003-10-23 05:04 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Hallelujah! Hallelujah! Halleluuuuuuuujah!
Sorry, I'm not even a religious person, but this warranted something.
The original script worked. Very slick, very cool. Thanks for the effort, it truly is appreciated. (Even though I could have manually created these groups three times over, I am thrilled to get this to work!!)
Now I have another project I'll be pestering you with related to these groups.
Thanks everyone!
Script used:
code:
;http://www.kixtart.org/board/ultimatebb.php?ubb=get_topic;f=1;t=007920 call @ScriptDir+'\CreateAdGroup.udf' ;********** Beginning of group creation ********* $logfile=c:\printers5.txt $printers = GetObject("LDAP://OU=Printers,DC=madonna,DC=local") $DN_of_OU ="OU=Printer Groups,DC=madonna,DC=local" if @error ? @error - @serror else $rc=redirectoutput($logfile,1) for each $printer in $printers $printername = $printer.name $printername = substr($printername,4) if left($printername,7) = "MRH-01-" $printername = lcase(substr($printername,8)) $defprintgroup = "D_MRH-01_"+$printername if CreateAdGroup($DN_of_OU, $defprintgroup, "global", 1, "Default Printer") ? "Group " + $defprintgroup + " successfully created" else ? "CreateAdGroup " + $defprintgroup + " Failed with Error: " + @error endif $addlprintgroup = "A_MRH-01_"+$printername if CreateAdGroup($DN_of_OU, $addlprintgroup, "global", 1, "Additional Printer") ? "Group " + $addlprintgroup + " successfully created" else ? "CreateAdGroup " + $addlprintgroup + " Failed with Error: " + @error endif endif next $rc=redirectoutput('') endif
tjcarst
[edited to clean up code spacing a little] [ 23. October 2003, 17:15: Message edited by: tjcarst ]
|
Top
|
|
|
|
#46720 - 2003-10-23 05:10 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Now I'll use this script to check for the existence of the workstations in the newly created printer groups and install the printers if needed. So cool.
code:
;http://www.kixtart.org/board/ultimatebb.php?ubb=get_topic;f=1;t=007920 call @ScriptDir+'\PriMapState.udf'
;********** Prevent script from running on a server or Win95********* if @userid = administrator call @Scriptdir+'\osid.udf' $os=osid() if $os[1]='Win95' or $os[2]<>'Workstation' exit 0 endif endif ;********** Prevent script from running on Medrec pcs ********* if InGroup ("Medrec Group") exit 0 endif ;********** Beginning of printer mapping ********* $WS = GetObject("WinNT://" + @domain + "/" + @wksta + "$$") if @error ? @serror else for each $grp In $WS.Groups $GrpName = $grp.Name ;--- Add and set default printer --- if left($GrpName,2) = "D_" $defprinter = substr($GrpName,3) $defprinter = join(split($defprinter,"_"),"\") if not PriMapState("\\" + $defprinter) ? "Status - Printer not connected \\"+$defprinter $nul=AddPrinterConnection("\\" + $defprinter) ? "Status - Printer added \\"+ $defprinter ? @serror $nul=SetDefaultPrinter("\\" + $defprinter) "Status - Default Printer set \\" +$defprinter ? @serror endif if PriMapState("\\" + $defprinter)<>2 $nul=SetDefaultPrinter("\\" + $defprinter) ? "Status - Default Printer set \\" + $defprinter ? @serror endif endif ;--- Add additional printers --- if left($GrpName,2) = "A_" $addlprinter = substr($GrpName,3) $addlprinter = join(split($addlprinter,"_"),"\") if not PriMapState("\\" + $addlprinter) ? "Status - Printer not connected \\" + $addlprinter $S=AddPrinterConnection("\\" + $addlprinter) ? "Status - Printer added \\" + $addlprinter ? @serror ? endif endif next endif
tjcarst [ 23. October 2003, 17:12: Message edited by: tjcarst ]
|
Top
|
|
|
|
#46721 - 2003-10-23 05:22 PM
Re: Create AD Global Groups for printer objects
|
Howard Bullock
KiX Supporter
Registered: 2000-09-15
Posts: 5809
Loc: Harrisburg, PA USA
|
Sorry that you lost so much time, but I am happy that you now have working code and a greater understanding KiXtart.
|
Top
|
|
|
|
#46722 - 2003-10-23 05:23 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
One small flaw. The group names that are longer than 15 characters fail for the mappings. I know it was indicated in the createad.udf that SAM account names could only contain 15 characters, but if I go into AD and find the longer names, I can modify the Pre-Windows 2000 name to be longer. Then the mappings occur correctly. Even stranger is that I am using XP and it should be using the AD name, not the SAM name.
I don't have many long group names, so this will take no time at all to fix the names in AD.
|
Top
|
|
|
|
#46724 - 2003-10-23 05:28 PM
Re: Create AD Global Groups for printer objects
|
Howard Bullock
KiX Supporter
Registered: 2000-09-15
Posts: 5809
Loc: Harrisburg, PA USA
|
A lesson for us all. If SETOPTION ("Explicit","ON") was used, this problem would have been seen at the first execution of the script. We all should be using SETOPTION ("Explicit","ON") in ALL of our code to help prevent such problems. [ 23. October 2003, 17:29: Message edited by: Howard Bullock ]
|
Top
|
|
|
|
#46725 - 2003-10-23 05:34 PM
Re: Create AD Global Groups for printer objects
|
Howard Bullock
KiX Supporter
Registered: 2000-09-15
Posts: 5809
Loc: Harrisburg, PA USA
|
code:
If Len($SAMAcctName) > 20 ; "SamAccountName CANNOT be bigger than 20 characters" $SAMAcctName = left($SAMAcctName, 20) ;WriteLog2($LogFile, "Function: CreateADGroup - Trimming SAMAcctName to 20 characters") ? "Function: CreateADGroup - Trimming SAMAcctName to 20 characters" EndIf
Even in NT4, you can make group names longer than 20 characters with code, but the supporting interface in User Manager can not process them. The tool has the limitation not the under lying data store. So you have to be cautious to build your names to the least common denominator for everything to work.
quote:
sAMAccountName Required. Specify a string that is the name used to support clients and servers from a previous version of Windows®. Note that the sAMAccountName should be less than 20 characters to support clients from a previous version of Windows. The sAMAccountName must be unique among all security principal objects within the domain. You should perform a query against the domain to verify that the sAMAccountName is unique within the domain.
[ 23. October 2003, 18:52: Message edited by: Howard Bullock ]
|
Top
|
|
|
|
#46726 - 2003-10-23 05:58 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Thanks, Howard.
One last question on this topic for me:
I am using a bit of code that checks to see if the default printer is set (after adding printers). I want it to set the default printer if it isn't correctly set, but already installed - wrong printer set default. If it is not mapped, it does correctly add and set as default.
I am using PriMapstate.udf for this and thought that it used to work, but I must have changed something.
Any idea what I have wrong with this bit?
code:
if PriMapState("\\" + $defprinter)<>2 $nul=SetDefaultPrinter("\\" + $defprinter) ? "Status - Default Printer set \\" + $defprinter ? @serror endif
|
Top
|
|
|
|
#46727 - 2003-10-23 06:01 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Thanks also for the explanation on th 15 character and 20 character limits. I am no longer using User Manager as I am in Native Mode AD. This should not be an issue.
tjcarst
|
Top
|
|
|
|
#46728 - 2003-10-23 08:38 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Well, I'm not sure it's the correct way to check for the status of the default printer (if already mapped buy not default), but this seems to work. Get the status of PriMapState and if not equal to 2, SetDefaultPrinter.
code:
;if PriMapState("\\" + $defprinter)<>2 ;does not work
$x=$PriMapstate if $x<>2 $nul=SetDefaultPrinter("\\" + $defprinter) ? "Status - Default Printer set \\" + $defprinter ? @serror endif
tjcarst [ 23. October 2003, 20:40: Message edited by: tjcarst ]
|
Top
|
|
|
|
#46729 - 2003-10-23 08:45 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Posted too soon. It sets the default printer EVERY time now.
|
Top
|
|
|
|
#46730 - 2003-10-23 08:53 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
I still don't have it. I have verified that the value returned is in fact 2, but can't get it to change the default printer if already installed.
code:
$rc=PriMapState("\\" + $defprinter) ? $rc ;if $rc=<>2 if $rc<>2
$nul=SetDefaultPrinter("\\" + $defprinter) ? "Status - Default Printer set \\" + $defprinter ? @serror ? else exit 0 endif
tjcarst [edited to fix =<>] [ 23. October 2003, 21:09: Message edited by: tjcarst ]
|
Top
|
|
|
|
#46732 - 2003-10-23 09:08 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Yep. Caught that. Sorry I didn't update here.
Still doesn't work, but shows my own inability to make up my mind
|
Top
|
|
|
|
#46733 - 2003-10-23 09:10 PM
Re: Create AD Global Groups for printer objects
|
NTDOC
Administrator
Registered: 2000-07-28
Posts: 11623
Loc: CA
|
Was this a training session, or is it trying to compete with the Golf series for the most posts on one subject?
|
Top
|
|
|
|
#46734 - 2003-10-23 09:15 PM
Re: Create AD Global Groups for printer objects
|
tjcarst
Hey THIS is FUN
Registered: 2003-09-08
Posts: 243
Loc: USA
|
Training session. Review my posts. I'm struggling. But persistent. I am going to get this to work. (Most likely not without help)
[ 23. October 2003, 21:16: Message edited by: tjcarst ]
|
Top
|
|
|
|
Moderator: Jochen, Allen, Radimus, Glenn Barnas, ShaneEP, Ruud van Velsen, Arend_, Mart
|
2 registered
(morganw, mole)
and 414 anonymous users online.
|
|
|