OK, we messed with the script a bit, but now we are stuck. It works on the machine you are running it on, but not on a remote machine like defaultprinter.vbs {computer}, which is what we would need to do to make it a Lansweeper action. The cool part is my friend figured out how to allow you to see a list of your print servers, enter the name of the printserver and then see a list of printers on that server and then enter the printer name. Not a drop down, but cool nonetheless. So, if we could get past the broken remote computer part (the script we started with used a file with computer names) it would be nice. Here is what we have so far in case anyone has any ideas or wants to use it.
'Set variables ( remote installation -=Network Printers=- )
'strprintserver = inputbox("Name of Server on which desired printer resides:","Adding Default Printer")
set objRootDSE = GetObject("LDAP://RootDSE")
strBase = "<LDAP://cn=sites," & _
objRootDSE.Get("ConfigurationNamingContext") & ">;"
strFilter = "(objectcategory=server);"
strAttrs = "distinguishedName;"
strScope = "subtree"
set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
strServers = "Enter below the name of the print server to check:" & vbcrlf
while Not objRS.EOF
strservers = strservers & left(objRS.Fields(0).Value,15) & vbcrlf
'Wscript.Echo objRS.Fields(0).Value
objRS.MoveNext
wend
strprintserver = inputbox(strservers,"Adding Printers","")
'StrPrinterName = "" ' <--- display-name on the server!
'strPrinterName = inputbox("Display name of desired printer:","Adding Default Printer")
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strPrintServer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("SELECT * FROM Win32_Printer WHERE PortName LIKE '%10.%' ")
strMenu = "Enter below one of these printer names:" & vbCrLf
c = 0
For Each objPrinter in colInstalledPrinters
strmenu = strmenu & objPrinter.Name
c = c + 1
if c MOD 2 =0 then
strmenu = strmenu & vbcrlf
else
strmenu = strmenu & ", "
end if
Next
strPrintername = inputbox(strmenu,"Menu","")
'wscript.echo strprinter
sasdefault = inputbox("Make Default Printer?","Adding Printer","yes")
'sAsDefault = "yes" ' <--- choose "yes" or "no" if make it the default printer for the logged-on user.
if sasDefault <> "yes" then sasDefault = "no"
'*****************************************************************
'* Get SID from currently logged-on DomainUser
'*****************************************************************
'\
'script: "RemoteEditRegistry.vbs"
'created on 7 march 07 by Remco Simons [nl]
'
' This version 1.0
' (http://www.petri.co.il/forums/showthread.php?t=14109)
'The script can only be runned by a member of the 'Domain Admins' group!
'/
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
On Error Resume Next
strComputer = "WAMN-MIS-NIKE2"
who = "winmgmts:{impersonationLevel=impersonate}!//"& strComputer &""
Set Users = GetObject( who ).InstancesOf ("Win32_ComputerSystem")
for each User in Users
strUsr = right(User.UserName,len(User.UserName)-InStr(User.UserName,"\"))
strDomain = left(User.UserName,InStr(User.UserName,"\")-1)
exit For
next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set colAccounts = objWMIService.ExecQuery _
("select * From Win32_UserAccount where name = '" & strUsr & "' AND domain = '" & strDomain & "'")
For each objAccount in colAccounts
strSID = objAccount.SID
exit For
Next
'You can now use the SID to edit the HKEY_USERS\{SID}-key of the logged-on Domain User...
'(you must end the main part of the script with: Loop [enter] objTSIn.Close )
'*****************************************************************
' -=Add and connect the network printer=-
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
'Parameters Key(4x) and values(5x)
strKeyPath1 = strSID & "\Software\Microsoft\Windows NT\CurrentVersion\Devices"
ValueName1 = "\\" & strPrintServer & "\" & StrPrinterName
'***Count the already installed 'net'port printers for the next available number
Set oMethod = objReg.Methods_("EnumValues")
Set oInParam = oMethod.inParameters.SpawnInstance_()
oInParam.hDefKey = HKEY_USERS
oInParam.sSubKeyName = strKeyPath1
Set oOutParam = objReg.ExecMethod_("EnumValues", oInParam)
xCount = 0
For i=0 To UBound(oOutParam.Properties_("sNames"))
sName = oOutParam.Properties_("sNames")(i)
objReg.GetStringValue HKEY_USERS,strKeyPath1,sName,dwValue
If Not InStr(1,dwValue,"winspool,LPT",0) = 0 Then
'LPT port
ELSE 'Ne.. ports
If sName = ValueName1 Then
strValue1 = dwValue
ELSE
xCount = xCount + 1
End If
End If
Next
sNe = "Ne"& 0&xCount &":"
If not strValue1 = dwValue then strValue1 = "winspool," & sNe
strKeyPath2 = strSID & "\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts"
ValueName2 = ValueName1
strValue2 = strValue1 & ",15,45"
strKeyPath3 = strSID & "\Printers\Connections\,," & strPrintServer & "," & StrPrinterName
ValueName3a = "Server"
strValue3a = "\\" & strPrintServer
ValueName3b = "Provider"
strValue3b = "win32spl.dll"
strKeyPath4 = strSID & "\Software\Microsoft\Windows NT\CurrentVersion\Windows"
ValueName4 = "Device"
strValue4 = ValueName1 & "," & strValue1
'Add the printer to the 'CURRENT'_USER's path
objReg.CreateKey HKEY_USERS, strKeyPath3
objReg.SetStringValue HKEY_USERS, strKeyPath2, ValueName2, strValue2
objReg.SetStringValue HKEY_USERS, strKeyPath1, ValueName1, strValue1
objReg.SetStringValue HKEY_USERS, strKeyPath3, ValueName3a, strValue3a
objReg.SetStringValue HKEY_USERS, strKeyPath3, ValueName3b, strValue3b
'Make it the default printer Y/N?
If LCase(sAsDefault) = "yes" Then
objReg.SetStringValue HKEY_USERS, strKeyPath4,ValueName4, strValue4
End If
On Error GoTo 0
wscript.echo "Done!"
wscript.quit