With much help from members of this board, I have a script that works for me.
Code:
;kixtart.kix - primary login script
;Setup Printers for computers in Printers Group
if ComputerInGroup('Printer Setup Group')=1
call @ScriptDir+'\printers.kix'
endif
;============ ComputerInGroup Function ===========
;Function ComputerInGroup()
;
;Author Radimus (really Howard Bullock's code)
;
;Contributors Almost entirely written by Howard Bullock
; I just stuffed it into UDF format and posted it
;
;Action Returns a 1 if the @wksta is a member of domain group
;
;Syntax ComputerInGroup($group,optional $Domain)
;
;Version 1.00
;
;Date 2003-Sep-03
;
;Date Revised
;
;Revision Reason 1.00
;
;Parameters $group = name of group to test for
; $domain = optional parameter for testing a different domain than current
;
;Remarks see Ingroup(), but for computer accounts instead of user accounts
;
;Returns 1 if in specified group
; 0 if not
; @error =1 for bad group or domain
;
;Dependencies ADSI
;
;KiXtart Ver Written and tested with KiXtart v4.21
;
;Example If ComputerInGroup('domain computers')=1
; ? 'Computer is a member'
; endif
Function ComputerInGroup($group,optional $Domain)
Dim $oGrp
if not $domain $domain=@domain endif
$oGrp = GetObject("WinNT://" + $domain + "/" + $group + ",group" )
if @error exit 1 endif
if $oGrp.IsMember("WinNT://" + $domain + "/" + @wksta + "$$" )
$ComputerInGroup=1
else
$ComputerInGroup=0
endif
endfunction
Code:
;printers.kix called by kixtart.kix for computers in Printers Group
$WS = GetObject('WinNT://' + @domain + '/' + @wksta + '$$')
if @error
? @serror
else
$ps1='server1'
for each $grp In $WS.Groups
$GrpName = $grp.Name
;--- Add additional printers ---
if left($GrpName,4) = 'A01_'
$addlprinter = substr($GrpName,5)
$addlprinter = $ps1+'\'+$addlprinter
$addlprinter = '\\'+$addlprinter
? "Additional Printer: "$addlprinter
if not PriMapState($addlprinter)
? "Status: Printer not connected " + $addlprinter
$nul=AddPrinterConnection($addlprinter)
? "Status: Printer added " + $addlprinter
? @serror ?
endif
endif
;--- Add and set default printer ---
if left($GrpName,4) = 'D01_'
$defprinter = substr($GrpName,5)
$defprinter = $ps1+'\'+$defprinter
$defprinter = '\\' + $defprinter
? "** Printers assigned through Printer Setup Group **"
? " "
? "Default Printer: "$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 changed " + $defprinter
? @serror ?
?
endif
endif
next
endif
;FUNCTION PriMapState v1.1
;
;AUTHOR Lonkero (Jooel.Nieminen@gwspikval.com)
;
;ACTION Checks for existent networkprinter connection
;
;SYNTAX PriMapState(PRINTER)
;
;PARAMETERS PRINTER
; Printers name to be checked
;
;RETURNS 1 if printer connected
; 2 if printer is default
; nothing if not connected
;
;REMARKS code for w9x adapted from BrianTX
;
;DEPENDENCIES none
;
;EXAMPLE if not PriMapState('\\server\printer1')
; "printer not connected!"
; endif
;
;CODE
function PriMapState($_Pri)
if @inwin=1
if len(readvalue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices",$_Pri))
; if instr(readvalue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device"),$_Pri)
if split(readvalue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device"),",")[0]=$_Pri
$PriMapState=2
else
$PriMapState=1
endif
endif
else
dim $_Root,$_C,$_C2 $_Root="HKLM\System\CurrentControlSet\control\Print\Printers"
for $_C=0 to 259
$_C2=enumkey($_Root,$_C)
If instr(READVALUE($_Root+"\"+$_C2,"Port"),$_Pri)
If instr(READPROFILESTRING("%windir%\win.ini","windows","device"),$_Pri)
$PriMapState = 2
Else
$PriMapState = 1
Endif
Endif
if $_C2=259 $_C=$_C2 endif
next
endif
endfunction