Community FAQ
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
tdewar1
Engaged Sweeper
I found the script below online and was wondering if it could be modified to be a lansweeper action to set a default printer.



'Set variables ( remote installation -=Network Printers=- )
strPrintServer = "servername"
StrPrinterName = "displayname printer" ' <--- display-name on the server!
sAsDefault = "yes" ' <--- choose "yes" or "no" if make it the default printer for the logged-on user.


strInputFile = "C:\computers.txt"

'*****************************************************************
'* 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

'Get the Computernames for processing from file (an other option would be a LDAP-query AD for computernames)
Set objController = CreateObject("WshController")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTSIn = objFSO.OpenTextFile(strInputFile)

Do Until objTSIn.AtEndOfStream '<---------------[begin loop, to process computers from list one-by-one]
strComputer = objTSIn.ReadLine


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


Loop
objTSIn.Close '<--- End of list computernames, close InputFile

On Error GoTo 0

wscript.echo "Done!"
wscript.quit
2 REPLIES 2
Cobra7
Champion Sweeper
Good thinking, while I don't think I will use it, it may be handy some day.

The problem is that you are not telling it to look at other computers.

Attached is a script I use to run various programs on other computers, if you take the guts from this script and fit them in yours it should work remotly.

If Wscript.Arguments.Count = 0 Then
strComputer = "."
else
strComputer = Wscript.Arguments(0)
end if
strCommand = "\\XXXXXX\XXXXX\script.exe"



Const INTERVAL = "n"
Const MINUTES = 1


Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob")
Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")


objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, MINUTES, Now()))
errReturn = objScheduledJob.Create(strCommand, objSWbemDateTime.Value, False, 0, 0, True, intJobID)


If errReturn = 0 Then
Wscript.Echo "xxxx was started with a process ID: " & intJobID
Else
Wscript.Echo "xxxx could not be started due to error: " & errReturn
End If
tdewar1
Engaged Sweeper
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

Archive

This board contains archived posts from the retired Lansweeper Forum and Insiders Community.

New to Lansweeper?

Try Lansweeper For Free

Experience Lansweeper with your own data.
Sign up now for a 14-day free trial.

Try Now