Jump to content

Recommended Posts

Posted

I've altered my printer script to add a section for Citrix clients but i can't get them to add when logging onto the citrix box but it will add the correct client from a windows xp client. I'm not sure where the %CLIENTNAME% info is collected from so i'm not sure i have that right.

 

Can anyone suggest what is wrong?

 

Cheers.

 

On error resume next

Dim WSHShell, WSHNetwork, objDomain, DomainString, UserString, UserObj, Network, computerName, room, WSHPrinters, LOOP_COUNTER, Path


Set objDomain = getObject("LDAP://rootDse")
DomainString = objDomain.Get("dnsHostName")
Set WSHNetwork = CreateObject("WScript.Network")
Set Network = CreateObject("Wscript.Network") 
computerName = LCase(WshNetwork.ComputerName)
room = left(computerName,3)



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


'Remove ALL old printers
'Enumerate all printers first, after that you can select the printers you want by performing some string checks
Set WSHPrinters = WSHNetwork.EnumPrinterConnections
For LOOP_COUNTER = 0 To WSHPrinters.Count - 1 Step 2
'To remove only networked printers use this If Statement
   If Left(WSHPrinters.Item(LOOP_COUNTER +1),2) = "\\" Then
     WSHNetwork.RemovePrinterConnection WSHPrinters.Item(LOOP_COUNTER +1),True,True
   End If
'To remove all printers incuding LOCAL printers use this statement and comment out the If Statement above
'WSHNetwork.RemovePrinterConnection WSHPrinters.Item(LOOP_COUNTER +1),True,True
Next

                              

'Give the PC time to disconnect old printers, wait 3000 milliseconds
wscript.sleep 3000



'Set local printer to default
'------------------------------------------------------------

Set WSHPrinters = WSHNetwork.EnumPrinterConnections
For LOOP_COUNTER = 0 To WSHPrinters.Count - 1 Step 2
'Find local printers
   If Left(WSHPrinters.Item(LOOP_COUNTER +1),2) <> "\\" Then
     WSHNetwork.SetDefaultPrinter _              
             (WSHPrinters.Item(LOOP_COUNTER +1))
   End If
Next


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

'Citrix specific section

if (Left(computerName, 4) = "zeus") then

computerName = LCase(WshShell.ExpandEnvironmentStrings("%CLIENTNAME%"))

end if

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



'Begin install new printrs by machine name
'--------------------------------------------

  

Select Case room
     	



Case "ad2"

Network.AddwindowsPrinterConnection "\\trigger\AD2_4100n"
Network.SetDefaultPrinter "\\trigger\AD2_4100n"


Case "lib"

Network.AddwindowsPrinterConnection "\\trigger\Ricohafi"
Network.AddwindowsPrinterConnection "\\LIBOFF-001\DELL"
Network.AddwindowsPrinterConnection "\\trigger\LRClaser"
Network.SetDefaultPrinter "\\trigger\LRCLaser"

Case "lrc"

Network.AddwindowsPrinterConnection "\\trigger\lrclaser"
Network.SetDefaultPrinter "\\trigger\lrcLaser"



case else

End Select


'Clean Up Memory Used
set WSHNetwork = Nothing
set UserObj = Nothing
set WSHNetwork = Nothing
set DomainString = Nothing
set WSHSHell = Nothing
Set WSHPrinters = Nothing
Set Network = Nothing
 
'Quit the Script
wscript.quit

Posted

My two cent, (it's worth about that)

 

The script looks good, looks like it might work, I've never used Citrix so I'm not sure about the API with regards to picking up client info, a quick Google found:

 

If CTXQuerySessionInformation("", WF_CURRENT_SESSION, WFClientName, Name) 

 

Not sure if that works, helps, whatever.

 

Am I correct in thinking if you connect to the Citrix server you only want the local printers, in which case can't you add a script to (remove all printers,) add the local, set it to default, to the startup

 

I'm prob talking rubbish.

Posted

The 'Citrix specific section is supposed to get the thin client units name and then add a network printer, you can't use the 'computerName' variable with thin clients like you do in Windows so you have to change that to 'clientname' and this seems to be the bit that isn't working.

 

'Citrix specific section

if (Left(computerName, 4) = "zeus") then

computerName = LCase(WshShell.ExpandEnvironmentStrings("%CLIENTNAME%"))

end if

Posted

You are looking at the script variable 'room' to allocate printers... this is set prior to the Citrix section so never gets updated to contain the the 'clientname' environment variable.

 

Just edit the select statement to read:

 

Select Case left(computerName,3) 

  • Thanks 1
Posted (edited)

Ok don't flinch i'm back, i've simplified the script a bit and it still works on my fat clients but not on the TS still. This is a new Citrix setup is there something that i need to set for this to work? I've given the thin client device a hostname of lrc-001 and this shows up in the Citrix console as the client name, am i missing anything else?

 

 

New Script

 

It's basically giving me an 'object required' error on line 63 (computerName = LCase(WshShell.ExpandEnvironmentStrings("%CLIENTNAME%")))

 


'Adds the appropriate network printer for the room


Option Explicit

'On error resume next

Dim WSHShell, WSHNetwork, objDomain, DomainString, UserString, UserObj, Network, computerName, room, WSHPrinters, LOOP_COUNTER, Path


Set objDomain = getObject("LDAP://rootDse")
DomainString = objDomain.Get("dnsHostName")
Set WSHNetwork = CreateObject("WScript.Network")
Set Network = CreateObject("Wscript.Network") 
computerName = LCase(WshNetwork.ComputerName)



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


'Remove ALL old printers
'Enumerate all printers first, after that you can select the printers you want by performing some string checks
Set WSHPrinters = WSHNetwork.EnumPrinterConnections
For LOOP_COUNTER = 0 To WSHPrinters.Count - 1 Step 2
'To remove only networked printers use this If Statement
   If Left(WSHPrinters.Item(LOOP_COUNTER +1),2) = "\\" Then
     WSHNetwork.RemovePrinterConnection WSHPrinters.Item(LOOP_COUNTER +1),True,True
   End If
'To remove all printers incuding LOCAL printers use this statement and comment out the If Statement above
'WSHNetwork.RemovePrinterConnection WSHPrinters.Item(LOOP_COUNTER +1),True,True
Next
                             

'Give the PC time to disconnect old printers, wait 3000 milliseconds
wscript.sleep 3000


'Set local printer to default
'------------------------------------------------------------

Set WSHPrinters = WSHNetwork.EnumPrinterConnections
For LOOP_COUNTER = 0 To WSHPrinters.Count - 1 Step 2
'Find local printers
   If Left(WSHPrinters.Item(LOOP_COUNTER +1),2) <> "\\" Then
     WSHNetwork.SetDefaultPrinter _              
             (WSHPrinters.Item(LOOP_COUNTER +1))
   End If
Next


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

'Citrix specific section

if LCase(Left(computerName, 4) = "zeus") then

computerName = LCase(WshShell.ExpandEnvironmentStrings("%CLIENTNAME%"))

end if

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


  

'Next line grabs the first 3 letters from the computername and adds the appropriate printer
'-------------------------------------------------------------------------------------------

Select Case (left(computerName, 3))
     	


Case "its"

Network.AddwindowsPrinterConnection "\\trigger\Ricohafi"
Network.AddwindowsPrinterConnection "\\trigger\IT_1320n"
Network.SetDefaultPrinter "\\trigger\IT_1320n"


Case "lrc"

Network.AddwindowsPrinterConnection "\\trigger\lrclaser"
Network.SetDefaultPrinter "\\trigger\lrcLaser"




Case else

End Select


'Clean Up Memory Used
set WSHNetwork = Nothing
set UserObj = Nothing
set WSHNetwork = Nothing
set DomainString = Nothing
set WSHSHell = Nothing
Set WSHPrinters = Nothing
Set Network = Nothing
 
'Quit the Script
wscript.quit

Edited by cookie_monster
Posted

Oops i was missing Set WSHShell = CreateObject("WScript.Shell") at the top of the stript so i had an empty object.

 

 

I've used UCase rather than LCase as my whole production script has upper case hostnames and it seems to be working now, do you see any Citrix specific issues with this?

 

Thanks for your help.

Posted
I've used UCase rather than LCase as my whole production script has upper case hostnames and it seems to be working now, do you see any Citrix specific issues with this?

 

No... I just used lower case in mine because I did

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...