cookie_monster Posted August 12, 2008 Posted August 12, 2008 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
matt40k Posted August 12, 2008 Posted August 12, 2008 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.
cookie_monster Posted August 12, 2008 Author Posted August 12, 2008 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
matt40k Posted August 12, 2008 Posted August 12, 2008 Support Forums - Citrix Knowledge Center CTX859359 - How the Win32 ICA Client Determines the Value for ClientName - Citrix Knowledge Center I'll be more help if someone sends me a Citrix setup
cookie_monster Posted August 12, 2008 Author Posted August 12, 2008 @ Geoff: Yes the TS is called zeus Matt i'll take a look at the link cheers.
cookie_monster Posted August 12, 2008 Author Posted August 12, 2008 I think judging by this page in the wiki that Ric might be the man with the answer. Printer Addition Based on Location
Ric_ Posted August 12, 2008 Posted August 12, 2008 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) 1
cookie_monster Posted August 12, 2008 Author Posted August 12, 2008 (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 August 13, 2008 by cookie_monster
cookie_monster Posted August 13, 2008 Author Posted August 13, 2008 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.
Ric_ Posted August 13, 2008 Posted August 13, 2008 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
cookie_monster Posted August 13, 2008 Author Posted August 13, 2008 (edited) Excellent cheers Ric. Grant. Edited August 13, 2008 by cookie_monster
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now