mlsills
asked on
MS Windows Server 2003 Printer Script
I have a Windows 2003 server (not R2). Three user groups: Students, Teachers and Business. There are three primary network printers and several direct attached. I want to have a script which will:
If a Student or Teacher logs into a classroom computer (all classroom computers have names begining with "Grade") then the default printer should be "Upstairs" Other wise they default to "ComputerRoom"
If a Business user logs in they default to their attached printer or can select from: "ComputerRoom" or "Color"
Thanks in advnace for your help!
If a Student or Teacher logs into a classroom computer (all classroom computers have names begining with "Grade") then the default printer should be "Upstairs" Other wise they default to "ComputerRoom"
If a Business user logs in they default to their attached printer or can select from: "ComputerRoom" or "Color"
Thanks in advnace for your help!
ASKER
Thank you for the code! I beleive that it is getting me there, still a problem. I had to make some changes to your code. I probably led to some confusion and apologize in advance if I have added to my own problems in modifying the code your prepared.
There is not "Grade Printer" so I eliminated references to that, the Color Printer is not allowed to be used by students or teachers accounts (they would go wild!) so I eliminated references to that. However, getting an error "strOU not defined"
Further questions:
1: Some of the computers are Windows 2000 is this a potential problem using this?
2: In the classrooms and computer lab we are using a generic user account "suser" so there may be and are multiple logins using the same account, although on different work stations. Will this cause a problem?
The script now looks like the following:
========================== ========== ========== ========== ========== ========== =====
Option Explicit
Dim objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
strUpstairsPrinter="\\NHHD SDC3.LOCAL \Upstairs_ HP"
strComputerRoomPrinter="\\ NHHDSDC3.L OCAL\Compu terRoom_HP "
Set objNetwork = CreateObject("WScript.Netw ork")
'add all printers to computer
objNetwork.AddWindowsPrint erConnecti on strUpstairsPrinter
objNetwork.AddWindowsPrint erConnecti on strComputerRoomPrinter
'pick which to set as default
Set objAdsSystemInfo = CreateObject("adsysteminfo ")
Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerN ame)
Set objOU = GetObject(objComputerName. Parent)
strOU = replace(objOU.Name,"OU="," ")
Select Case strOU
Case "Students"
if left(objAdsSystemInfo.Comp uterName,5 )="Grade" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Teachers"
if left(objAdsSystemInfo.Comp uterName,5 )="Grade" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Business"
End Select
WScript.Quit
========================== ========== ========== ========== ========== ========== ==
I'd like to talk about the Business user after I get this working.
Thank you again for your help!
Mark
(my direct e-mail is: # Removed by ModernMatt 21 Feb 2009 #)
There is not "Grade Printer" so I eliminated references to that, the Color Printer is not allowed to be used by students or teachers accounts (they would go wild!) so I eliminated references to that. However, getting an error "strOU not defined"
Further questions:
1: Some of the computers are Windows 2000 is this a potential problem using this?
2: In the classrooms and computer lab we are using a generic user account "suser" so there may be and are multiple logins using the same account, although on different work stations. Will this cause a problem?
The script now looks like the following:
==========================
Option Explicit
Dim objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
strUpstairsPrinter="\\NHHD
strComputerRoomPrinter="\\
Set objNetwork = CreateObject("WScript.Netw
'add all printers to computer
objNetwork.AddWindowsPrint
objNetwork.AddWindowsPrint
'pick which to set as default
Set objAdsSystemInfo = CreateObject("adsysteminfo
Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerN
Set objOU = GetObject(objComputerName.
strOU = replace(objOU.Name,"OU=","
Select Case strOU
Case "Students"
if left(objAdsSystemInfo.Comp
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Teachers"
if left(objAdsSystemInfo.Comp
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Business"
End Select
WScript.Quit
==========================
I'd like to talk about the Business user after I get this working.
Thank you again for your help!
Mark
(my direct e-mail is: # Removed by ModernMatt 21 Feb 2009 #)
ASKER
Thank you, I'd not thoughtof the e-mail address problem ...thanks for your help!
Mark
Mark
Hi,
you get the strOU is undefined because there is a "Option explicit" statement in the beginning of the script and strOU is not defined in a Dim statement so add that and that error will disappear.
Q> Some of the computers are Windows 2000 is this a potential problem using this?
A> I assume that the groups are groups in ActiveDirectory, and if the domain can handle Windows 2000 computers I dont think there is a problem
Q> In the classrooms and computer lab we are using a generic user account "suser" so there may be and are multiple logins using the same account, although on different work stations. Will this cause a problem?
A> as long as the user account is member of the different groups you described in the question it should be handled as that type of user, regardless of the person behind the keyboard. This script should look for the computer name, logged on user and then map the user to what groups it belongs to and from there deside which printer to connect and which printer to set as default.
In the script I see that the printers are mapped regardless of what user, group that is connected, if you want only some groups to be able to print in e.g. the color printer you need to move the objNetwork.AddWindowsPrint erConnecti on statment into the If clauses that desides what group you belongs to?
hope you understand what described , otherwise we give it another round...
Good luck!
/ Mikael
you get the strOU is undefined because there is a "Option explicit" statement in the beginning of the script and strOU is not defined in a Dim statement so add that and that error will disappear.
Q> Some of the computers are Windows 2000 is this a potential problem using this?
A> I assume that the groups are groups in ActiveDirectory, and if the domain can handle Windows 2000 computers I dont think there is a problem
Q> In the classrooms and computer lab we are using a generic user account "suser" so there may be and are multiple logins using the same account, although on different work stations. Will this cause a problem?
A> as long as the user account is member of the different groups you described in the question it should be handled as that type of user, regardless of the person behind the keyboard. This script should look for the computer name, logged on user and then map the user to what groups it belongs to and from there deside which printer to connect and which printer to set as default.
In the script I see that the printers are mapped regardless of what user, group that is connected, if you want only some groups to be able to print in e.g. the color printer you need to move the objNetwork.AddWindowsPrint
hope you understand what described , otherwise we give it another round...
Good luck!
/ Mikael
ASKER
Hello Mikael,
Many thanks for your thoughtful reply, it goes a really long way to helping me out of this problem!
I am afraid that I need more help with where or what to do with the strOU statement.Another person on the Experts Exchange sent this script to me in response to my initial question. So I don't know if the strOU statement is necessary or where it should actually be laced.
After the error is corrected I think that I need to find a way to remove all the currently installed printers so that only this script is in control.
Thank you for your continuing help!
Mark
Many thanks for your thoughtful reply, it goes a really long way to helping me out of this problem!
I am afraid that I need more help with where or what to do with the strOU statement.Another person on the Experts Exchange sent this script to me in response to my initial question. So I don't know if the strOU statement is necessary or where it should actually be laced.
After the error is corrected I think that I need to find a way to remove all the currently installed printers so that only this script is in control.
Thank you for your continuing help!
Mark
From what I can see in the script the strOU is the groupname you want to decide if its a teacher, student or business and thats whats used in the Select Case statement to do things depending on what the group is.
There is a command to delete printer connections as well from a computer, and that is
WshNetwork.RemovePrinterCo nnection \\printserv\DefaultPrinter , true, true
You can find the reference for it at http://msdn.microsoft.com/ en-us/libr ary/tsbh2y y7(VS.85). aspx
So what you probably need to do is to loop through all connected printers and delete all connected printers (see code snippet below), but you should take into consideration that a user might have been mapping a printer by
them self that they want/need to have.
/ Mikael
There is a command to delete printer connections as well from a computer, and that is
WshNetwork.RemovePrinterCo
You can find the reference for it at http://msdn.microsoft.com/
So what you probably need to do is to loop through all connected printers and delete all connected printers (see code snippet below), but you should take into consideration that a user might have been mapping a printer by
them self that they want/need to have.
/ Mikael
' Script part to remove all network connected printers on the local computer
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery ("Select * From Win32_Printer Where Network = True")
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
Sorry for the delay getting back to you, mlsills. Just after I put that code in for you, i took a short vacation.
Anyway, the strOU is just a string variable. It should have been dimentioned in the second line of code:
Dim objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
should be
Dim objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter, strOU
That is just a holder for the name of the OU that is returned by the line:
strOU = replace(objOU.Name,"OU="," ")
this line gets the whole name of the OU (OU=OUNAME) and cuts off the "OU=" That makes it easier to deal with the next section which does all the IF stuff with the OUs.
I'd be wary of removing all printers from a user's login. Network printers are saved on a per-user basis, not per-machine. That means the only way another printer would be mapped is manually for a specific user. If you remove ALL printers, you could be removing a specific printer that is really needed by a user.
I've got no more vacation any time soon, so i'll keep checking back here in case you need follow up.
Anyway, the strOU is just a string variable. It should have been dimentioned in the second line of code:
Dim objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
should be
Dim objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter, strOU
That is just a holder for the name of the OU that is returned by the line:
strOU = replace(objOU.Name,"OU=","
this line gets the whole name of the OU (OU=OUNAME) and cuts off the "OU=" That makes it easier to deal with the next section which does all the IF stuff with the OUs.
I'd be wary of removing all printers from a user's login. Network printers are saved on a per-user basis, not per-machine. That means the only way another printer would be mapped is manually for a specific user. If you remove ALL printers, you could be removing a specific printer that is really needed by a user.
I've got no more vacation any time soon, so i'll keep checking back here in case you need follow up.
ASKER
Thanks and welcome back! Good to be communicating with the one who wrote the code. I'm not at school now and neglected to bring a copy of the modified script with me. But I will attend to that first thing in the morning ... probably with more questions!
Thanks again!
Mark
Thanks again!
Mark
ASKER
Good morning ... at least it's morning here in Connecticut!
Here is the code, modified from your original.
========================== ========== ========== ========== ========== ========== =======
Option Explicit
Dim strOU, objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
strUpstairsPrinter="\\NHHD S3.NHHDSDC 3.LOCAL\Up stairs_HP"
strComputerRoomPrinter="\\ NHHDS3.NHH DSDC3.LOCA L\Computer Room_HP"
Set objNetwork = CreateObject("WScript.Netw ork")
'add all printers to computer
objNetwork.AddWindowsPrint erConnecti on strUpstairsPrinter
objNetwork.AddWindowsPrint erConnecti on strComputerRoomPrinter
'pick which to set as default
Set objAdsSystemInfo = CreateObject("adsysteminfo ")
Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerN ame)
Set objOU = GetObject(objComputerName. Parent)
strOU = replace(objOU.Name,"OU="," ")
Select Case strOU
Case "Students"
if left(objAdsSystemInfo.Comp uterName,5 )="Grade" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Teachers"
if left(objAdsSystemInfo.Comp uterName,5 )="Grade" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Business"
End Select
WScript.Quit
========================== ========== ========== ========== ========== ========== ====
I would generally agree with your comment to not delete existing printers, however, students and teachers should have no choice, we want them to only have the approved printers and to default to the printer closest to them. However, that should be a one-time script and I'd like to address that later.
I have tested the script (using it with student and teacher accounts) With the teacher and student accouts in the lab the printer is defaulting to the "Upstairs_HP" and it should default to the "ComputerRooom_HP".
In the classrooms, where the OS is Win 2000 It does not appear to be working, the problem is that users get a message: "Do not have suffieient security priovelegs to install devices." Local machine policies have Restrict Install Printer Drivers - disabled so that should not be a problem.
I really would appreciate your thoughts and suggestions!
Mark
Here is the code, modified from your original.
==========================
Option Explicit
Dim strOU, objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
strUpstairsPrinter="\\NHHD
strComputerRoomPrinter="\\
Set objNetwork = CreateObject("WScript.Netw
'add all printers to computer
objNetwork.AddWindowsPrint
objNetwork.AddWindowsPrint
'pick which to set as default
Set objAdsSystemInfo = CreateObject("adsysteminfo
Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerN
Set objOU = GetObject(objComputerName.
strOU = replace(objOU.Name,"OU=","
Select Case strOU
Case "Students"
if left(objAdsSystemInfo.Comp
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Teachers"
if left(objAdsSystemInfo.Comp
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Business"
End Select
WScript.Quit
==========================
I would generally agree with your comment to not delete existing printers, however, students and teachers should have no choice, we want them to only have the approved printers and to default to the printer closest to them. However, that should be a one-time script and I'd like to address that later.
I have tested the script (using it with student and teacher accounts) With the teacher and student accouts in the lab the printer is defaulting to the "Upstairs_HP" and it should default to the "ComputerRooom_HP".
In the classrooms, where the OS is Win 2000 It does not appear to be working, the problem is that users get a message: "Do not have suffieient security priovelegs to install devices." Local machine policies have Restrict Install Printer Drivers - disabled so that should not be a problem.
I really would appreciate your thoughts and suggestions!
Mark
There is another way to map network printers using the printUI:
rundll32 printui.dll,PrintUIEntry /in /n\\NHHDSDC3.LOCAL\Upstair s_HP
Try this command (from the console) on one of the classroom PCs and let me know if it works. There is another policy that might be stopping it. It's the "Load and unload device drivers" user right. I realize you might not want to enable that for your students, but for testing purposes, can you temporarily change that?
The incorrect default is because I used objAdsSystemInfo.ComputerN ame instead of objNetwork.ComputerName in the IF statements. The objADSSysteminfo gives the full AD computer name.
Here is the corrected part:
Select Case strOU
Case "Students"
if left(objNetwork.ComputerNa me,5)="Gra de" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Teachers"
if left(objNetwork.ComputerNa me,5)="Gra de" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Business"
End Select
Give that a shot and let me know how it goes.
Thanks!
rundll32 printui.dll,PrintUIEntry /in /n\\NHHDSDC3.LOCAL\Upstair
Try this command (from the console) on one of the classroom PCs and let me know if it works. There is another policy that might be stopping it. It's the "Load and unload device drivers" user right. I realize you might not want to enable that for your students, but for testing purposes, can you temporarily change that?
The incorrect default is because I used objAdsSystemInfo.ComputerN
Here is the corrected part:
Select Case strOU
Case "Students"
if left(objNetwork.ComputerNa
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Teachers"
if left(objNetwork.ComputerNa
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Business"
End Select
Give that a shot and let me know how it goes.
Thanks!
ASKER
This almost makes me want to go back to school right now and give it a try!
I'll let you know how things go in the morning!
Thanks,
mark
I'll let you know how things go in the morning!
Thanks,
mark
ASKER
Hello dm7941,
I regret to say that the change of code did not work, in all cases it defaults to the "UpstairsPrinter".
I tried the rundll32 from one of the classroom ("Grade") computers, using "Start" "Run" and that resulted in an error ... unable to locate the printer.
I did modify the rights to permit "Load and unload device drivers: and that did not have any effect either.
I am really at a loss to understand what the problem is ...
Mark
I regret to say that the change of code did not work, in all cases it defaults to the "UpstairsPrinter".
I tried the rundll32 from one of the classroom ("Grade") computers, using "Start" "Run" and that resulted in an error ... unable to locate the printer.
I did modify the rights to permit "Load and unload device drivers: and that did not have any effect either.
I am really at a loss to understand what the problem is ...
Mark
The OU and Computer name statements are case sensitive, i.e "Students" vs "STUDENTS"
You can do a little error checking with the msgbox command like this:
msgbox ("OU = " & strOU)
msgbox("Computer Name = " & objNetwork.ComputerName)
Put those two lines just after the "strOU = replace(objOU.Name,"OU="," ")" line
That will let you know what the program thinks your OU and Computer name are. Match the case in the select and if statements and that part should work.
The printUI command failed because I didn't copy your whole server name when I made the line. Use this instead:
\\NHHDS3.NHHDSDC3.LOCAL\Up stairs_HP
as in:
rundll32 printui.dll,PrintUIEntry /in /n\\NHHDS3.NHHDSDC3.LOCAL\ Upstairs_H P
We'll get this knocked out!!
You can do a little error checking with the msgbox command like this:
msgbox ("OU = " & strOU)
msgbox("Computer Name = " & objNetwork.ComputerName)
Put those two lines just after the "strOU = replace(objOU.Name,"OU=","
That will let you know what the program thinks your OU and Computer name are. Match the case in the select and if statements and that part should work.
The printUI command failed because I didn't copy your whole server name when I made the line. Use this instead:
\\NHHDS3.NHHDSDC3.LOCAL\Up
as in:
rundll32 printui.dll,PrintUIEntry /in /n\\NHHDS3.NHHDSDC3.LOCAL\
We'll get this knocked out!!
ASKER
Sorry for the delay getting back - one foot of snow on Monday and then problems which the users considered more important - life would be easier if they woukd just leave me alone!.
I ran the printUI command and it worked on a Win 2000 computer but not on an XP computer.
Today (Friday) I will add the lines you suggested into the script and see what results.
Thanks for your continued help!
Mark
I ran the printUI command and it worked on a Win 2000 computer but not on an XP computer.
Today (Friday) I will add the lines you suggested into the script and see what results.
Thanks for your continued help!
Mark
ASKER
I added the two lines and tested it and it returned the following:
OU= computerpolicy
ComputerName = LabComputer (this is the correct name of the computer I tested on.
I'm not sure that the OU is returning the correct value.
Mark
OU= computerpolicy
ComputerName = LabComputer (this is the correct name of the computer I tested on.
I'm not sure that the OU is returning the correct value.
Mark
Very useful, the commands are set to get the first OU from the computer instead of the user.
Here's how to get the OU of the user. There is a bit of array work in here, so you will need to adjust for the correct value. Use this test script to find out which return value you need. I'm sure there is a more elegent way to do this, but this does work.
Set objAdsSystemInfo = CreateObject("adsysteminfo ")
set objUser=GetObject("LDAP:// " & objAdsSystemInfo.UserName)
strOUPath=objUser.Parent
strOU=replace(stroupath,"L DAP://","" )
aOUs=split(strou,",")
msgbox aOUs(0) & "=0"
msgbox aOUs(1) & "=1"
msgbox aOUs(2) & "=2"
msgbox aOUs(3) & "=3"
this script gets the full OU name, splits it into an array and then messages the array values back to you one at a time. Once you figure out which value it is, replace this line in the original code:
Set objOU = GetObject(objComputerName. Parent)
with
set objUser=GetObject("LDAP:// " & objAdsSystemInfo.UserName)
strOUPath=objUser.Parent
strFullOU=replace(stroupat h,"LDAP:// ","")
aOUs=split(strou,",")
then replace line
strOU = replace(objOU.Name,"OU="," ")
with
strOU=aOUs(x)
where x is the correct return value from the test script.
as for the printUI command, i've actually never used it on anything but XP machines, so it still must be something in group policy that is causing it to fail. Were you able to change those policy things for testing?
Here's how to get the OU of the user. There is a bit of array work in here, so you will need to adjust for the correct value. Use this test script to find out which return value you need. I'm sure there is a more elegent way to do this, but this does work.
Set objAdsSystemInfo = CreateObject("adsysteminfo
set objUser=GetObject("LDAP://
strOUPath=objUser.Parent
strOU=replace(stroupath,"L
aOUs=split(strou,",")
msgbox aOUs(0) & "=0"
msgbox aOUs(1) & "=1"
msgbox aOUs(2) & "=2"
msgbox aOUs(3) & "=3"
this script gets the full OU name, splits it into an array and then messages the array values back to you one at a time. Once you figure out which value it is, replace this line in the original code:
Set objOU = GetObject(objComputerName.
with
set objUser=GetObject("LDAP://
strOUPath=objUser.Parent
strFullOU=replace(stroupat
aOUs=split(strou,",")
then replace line
strOU = replace(objOU.Name,"OU=","
with
strOU=aOUs(x)
where x is the correct return value from the test script.
as for the printUI command, i've actually never used it on anything but XP machines, so it still must be something in group policy that is causing it to fail. Were you able to change those policy things for testing?
ASKER
dm7941,
I think I understand what you are doing with this script. I tested it on my workstation and did get four different values (as I recall - I'm at home now) one was "business" which was the correct group to which I was logged in as.
I also understand the lines you want me to replace. However, then I am lost!
Which of the values do I enter in place of the "x"?
Sorry to be a pain, but I'm just not following at this point.
Mark
I think I understand what you are doing with this script. I tested it on my workstation and did get four different values (as I recall - I'm at home now) one was "business" which was the correct group to which I was logged in as.
I also understand the lines you want me to replace. However, then I am lost!
Which of the values do I enter in place of the "x"?
Sorry to be a pain, but I'm just not following at this point.
Mark
ASKER
More information:
The test script returned the following:
Logged in as a student
OU=students=0
DC=nhhdsdc3=1
DC=local=2
subscript out of range '[Number: 3]'
-------------------------- ---------- ---------- ---------- -----
Logged in as a teacher
OU=teacher=0
DC=nhhdsdc3=1
DC=local=2
subscript out of range '[Number: 3]'
-------------------------- ---------- ---------- ---------- ----
Logged in as business
OU=business=0
DC=nhhdsdc3=1
DC=local=2
subscript out of range '[Number: 3]'
-------------------------- ---------- ---------- ---------- -----
In all cases the number 3 was reported as an error.
Mark
The test script returned the following:
Logged in as a student
OU=students=0
DC=nhhdsdc3=1
DC=local=2
subscript out of range '[Number: 3]'
--------------------------
Logged in as a teacher
OU=teacher=0
DC=nhhdsdc3=1
DC=local=2
subscript out of range '[Number: 3]'
--------------------------
Logged in as business
OU=business=0
DC=nhhdsdc3=1
DC=local=2
subscript out of range '[Number: 3]'
--------------------------
In all cases the number 3 was reported as an error.
Mark
You'll use the "0" value (0 in place of x). The others don't matter. The only reason to do it this way is in case you had nested OUs.
ASKER
O.K., First thing in the morning I will give it a go!
Thanks,
Mark
Thanks,
Mark
ASKER
In a test run, using a script editor, I received the following error.
\\Nhhds3\teacherhome\mlsil ls\! MLSills\Scripts (VBS)\SetPrintersByLocatio n.vbs(24,1 )
Microsoft VBScript runtime error: Variable is undefined: 'objUser'
The Script As It Stands Now:
======================
Option Explicit
Dim strOU, objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
strUpstairsPrinter="\\NHHD S3.NHHDSDC 3.LOCAL\Up stairs_HP"
strComputerRoomPrinter="\\ NHHDS3.NHH DSDC3.LOCA L\Computer Room_HP"
Set objNetwork = CreateObject("WScript.Netw ork")
'add all printers to computer
objNetwork.AddWindowsPrint erConnecti on strUpstairsPrinter
objNetwork.AddWindowsPrint erConnecti on strComputerRoomPrinter
'pick which to set as default
Set objAdsSystemInfo = CreateObject("adsysteminfo ")
Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerN ame)
Set objUser=GetObject("LDAP:// " & objAdsSystemInfo.UserName)
strOUPath=objUser.Parent
strFullOU=replace(stroupat h,"LDAP:// ","")
aOUs=split(strou,",")
strOU=aOUs(0)
Select Case strOU
Case "Students"
if left(objNetwork.ComputerNa me,5)="Gra de" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Teachers"
if left(objNetwork.ComputerNa me,5)="Gra de" then
objNetwork.SetDefaultPrint er strUpstairsPrinter
else
objNetwork.SetDefaultPrint er strComputerRoomPrinter
end if
Case "Business"
End Select
WScript.Quit
========================
Mark
\\Nhhds3\teacherhome\mlsil
Microsoft VBScript runtime error: Variable is undefined: 'objUser'
The Script As It Stands Now:
======================
Option Explicit
Dim strOU, objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strUpstairsPrinter, strComputerRoomPrinter
strUpstairsPrinter="\\NHHD
strComputerRoomPrinter="\\
Set objNetwork = CreateObject("WScript.Netw
'add all printers to computer
objNetwork.AddWindowsPrint
objNetwork.AddWindowsPrint
'pick which to set as default
Set objAdsSystemInfo = CreateObject("adsysteminfo
Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerN
Set objUser=GetObject("LDAP://
strOUPath=objUser.Parent
strFullOU=replace(stroupat
aOUs=split(strou,",")
strOU=aOUs(0)
Select Case strOU
Case "Students"
if left(objNetwork.ComputerNa
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Teachers"
if left(objNetwork.ComputerNa
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Business"
End Select
WScript.Quit
========================
Mark
ASKER
The variable definition errors ceased after adding the following to the "Dim" statement
objUser, strOUPath, strFullOU, aOUs
However, upon testiing it receive a "subscript out of range '[numbver: 0]' " error.
Mark
objUser, strOUPath, strFullOU, aOUs
However, upon testiing it receive a "subscript out of range '[numbver: 0]' " error.
Mark
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Replace the \\server\printer with the appropriate path.
Obvoiusly, I can't test it with all your OU names and printers, so let me know if you get anything weird.
**************************
Option Explicit
Dim objNetwork, strUNCPrinter, strDefPrinter, objAdsSystemInfo, objComputerName, objOU, strGradePrinter, strUpstairsPrinter, strComputerRoomPrinter, strColorPrinter
strGradePrinter="\\Server\
strUpstairsPrinter="\\Serv
strComputerRoomPrinter="\\
strColorPrinter="\\Server\
Set objNetwork = CreateObject("WScript.Netw
'add all printers to computer
objNetwork.AddWindowsPrint
objNetwork.AddWindowsPrint
objNetwork.AddWindowsPrint
objNetwork.AddWindowsPrint
'pick which to set as default
Set objAdsSystemInfo = CreateObject("adsysteminfo
Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerN
Set objOU = GetObject(objComputerName.
strOU = replace(objOU.Name,"OU=","
Select Case strOU
Case "Students"
if left(objAdsSystemInfo.Comp
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Teachers"
if left(objAdsSystemInfo.Comp
objNetwork.SetDefaultPrint
else
objNetwork.SetDefaultPrint
end if
Case "Business"
End Select
WScript.Quit
**************************
I left the Business OU blank, because what you asked for is essentially to allow the user to always choose. Since all printers are installed, they can just pick anytime. That way their default will stay on that machine, unless you use roaming profiles. If you need to script setting a local printer as default, you can use something like the following:
Note: this is something I hacked together as an example, it will probably need adjustment.
Set objPrinter = objWshNetwork.EnumPrinterC
For a = 0 To objPrinter.Count - 1 Step 2
if Left(objPrinter(a),3) = "LPT" Then
PrinterFlag = True
Elseif Left(objPrinter(a),6) = "USB001" Then
PrinterFlag = True
Else
PrinterFlag = False
End If
Exit For