#187175 - 2008-04-22 08:46 PM
Move Printer Server
|
SnoopDuJour
Just in Town
Registered: 2008-04-22
Posts: 3
|
I am only using a snipit from this script. I have modified the script, as it was installing ALL printers from the [PRINTER_MAP].
One printer does not want to be moved.
Here is the script. -------- $pmap="\mitt_printers2.ini" For Each $key In Split(ReadProfileString($pmap,"PRINTER_MAP",""),Chr(10)) If PriMapState($key) $nulp=AddPrinterConnection(ReadProfileString($pmap,"PRINTER_MAP",$key)) If PriMapState($key)=2 $nulp=SetDefaultPrinter(ReadProfileString($pmap,"PRINTER_MAP",$key)) EndIf $nulp=DelPrinterConnection($key) EndIf Next ------------------------------
This is my mitt_printers2.ini file
[PRINTER_MAP] \\kcmakiki\MITTiR3035=\\TRPRINT\MITTRMIIR3035
--- Thanks
Edited by SnoopDuJour (2008-04-22 08:47 PM)
|
Top
|
|
|
|
#187176 - 2008-04-22 09:29 PM
Re: Move Printer Server
[Re: SnoopDuJour]
|
ghangis
Just in Town
Registered: 2008-04-21
Posts: 4
Loc: canada
|
Gents, I'm trying to use this script and I can't for the life of me get it working... My situation is very similar here... migrating printers from serverA to serverB and I want the script to check if \\serverA\printer1 exists, if it does, map \\serverB\printer1 (same share name).
if someone could assist I would be muchly greatful
Cheers,
|
Top
|
|
|
|
#187178 - 2008-04-22 10:31 PM
Re: Move Printer Server
[Re: ghangis]
|
NTDOC
Administrator
Registered: 2000-07-28
Posts: 11623
Loc: CA
|
Hello Ghangis,
You should not Hijack someone else post. You should post your own post and reference this one if needed.
ALL - I moved this thread out of the Learning Series into the BASIC forum. It is in reference to the post here: Move Print Server
|
Top
|
|
|
|
#187282 - 2008-04-24 10:36 PM
Re: Move Printer Server
[Re: ghangis]
|
SnoopDuJour
Just in Town
Registered: 2008-04-22
Posts: 3
|
Gents, I'm trying to use this script and I can't for the life of me get it working... My situation is very similar here... migrating printers from serverA to serverB and I want the script to check if \\serverA\printer1 exists, if it does, map \\serverB\printer1 (same share name).
if someone could assist I would be muchly greatful
Cheers,
If your just changing the server name, here is a VB Script which works Perfectly for me (when the share names are the same)
:VBcode
Option Explicit Dim from_sv, to_sv, PrinterPath, PrinterName, DefaultPrinterName, DefaultPrinter Dim DefaultPrinterServer, SetDefault, key Dim spoint, Loop_Counter Dim WshNet, WshShell Dim WS_Printers DefaultPrinterName = "" spoint = 0 SetDefault = 0 set WshShell = CreateObject("WScript.shell")
from_sv = "\\OldPrintServerName" 'This should be the name of the old server. to_sv = "\\NewPrintServerName" 'This should be the name of your new server.
'Just incase their are no printers and therefor no defauld printer set ' this will prevent the script form erroring out. On Error Resume Next key = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device" DefaultPrinter = LCase(WshShell.RegRead (key)) If Err.Number <> 0 Then DefaultPrinterName = "" else 'If the registry read was successful then parse out the printer name so we can ' compare it with each printer later and reset the correct default printer ' if one of them matches this one read from the registry. spoint = instr(3,DefaultPrinter,"\")+1 DefaultPrinterServer = left(DefaultPrinter,spoint-2) if DefaultPrinterServer = from_sv then DefaultPrinterName = mid(DefaultPrinter,spoint,len(DefaultPrinter)-spoint+1) end if end if Set WshNet = CreateObject("WScript.Network") Set WS_Printers = WshNet.EnumPrinterConnections 'You have to step by 2 because only the even numbers will be the print queue's ' server and share name. The odd numbers are the printer names. For Loop_Counter = 0 To WS_Printers.Count - 1 Step 2 'Remember the + 1 is to get the full path ie.. \\your_server\your_printer. PrinterPath = lcase(WS_Printers(Loop_Counter + 1)) 'We only want to work with the network printers that are mapped to the original ' server, so we check for "\\Your_server". if LEFT(PrinterPath,len(from_sv)) = from_sv then 'Now we need to parse the PrinterPath to get rhe Printer Name. spoint = instr(3,PrinterPath,"\")+1 PrinterName = mid(PrinterPath,spoint,len(PrinterPath)-spoint+1) 'Now remove the old printer connection. WshNet.RemovePrinterConnection from_sv+"\"+PrinterName 'and then create the new connection. WshNet.AddWindowsPrinterConnection to_sv+"\"+PrinterName 'If this printer matches the default printer that we got from the registry then ' set it to be the default printer. if DefaultPrinterName = PrinterName then WshNet.SetDefaultPrinter to_sv+"\"+PrinterName end if end if Next Set WS_Printers = Nothing Set WshNet = Nothing Set WshShell = Nothing
|
Top
|
|
|
|
#187368 - 2008-04-28 04:51 PM
Re: Move Printer Server
[Re: Björn]
|
ghangis
Just in Town
Registered: 2008-04-21
Posts: 4
Loc: canada
|
wow, that's a lot of code. I appreciate the assistance, but how do I implement?? do I just append that to the existing kix script??
thanks again.
|
Top
|
|
|
|
#187375 - 2008-04-28 11:49 PM
Re: Move Printer Server
[Re: ghangis]
|
Gargoyle
MM club member
Registered: 2004-03-09
Posts: 1597
Loc: Valley of the Sun (Arizona, US...
|
Here is the code that we recently used to migrate everyone from one print server to two print servers (clustered enviroment to boot)
$Printer = ReadValue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows", "Device")
$Server = Split($Printer,"\")
$sPrinterShare = Split($Server[3],",")
$PrinterName = $sPrinterShare[0]
$OldServerName = $Server[2]
If $Server[2] = "NewServer1" Or
$Server[2] = "NewServer2"
Goto additional
Else
Select
Case Right($sPrinterShare[0],1)=1
$NewServerName="NewServer1"
Case Right($sPrinterShare[0],1)=3
$NewServerName="NewServer1"
Case Right($sPrinterShare[0],1)=5
$NewServerName="NewServer1"
Case Right($sPrinterShare[0],1)=7
$NewServerName="NewServer1"
Case Right($sPrinterShare[0],1)=9
$NewServerName="NewServer1"
Case 1
$NewServerName="NewServer2"
EndSelect
EndIf
$OldValue = "\\"+$OldServerName+"\"+$PrinterName
$NewValue = "\\"+$NewServerName+"\"+$PrinterName
$rc=DelPrinterConnection("$OldValue")=0
$rc=AddPrinterConnection("$NewValue")=0
:additional
Dim $iIndex, $sPrinterkey[]
$iIndex = 0
While @ERROR=0
ReDim Preserve $sPrinterkey[$iIndex]
$sPrinters="HKCU\Printers\Connections"
$sPrinterKey[$iIndex] = EnumKey($sPrinters,$iIndex)
$iIndex=$iIndex+1
Loop
For Each $ in $sPrinterkey
$OldServerName=Split($,",")[2]
If $<>""
If Split($,",")[2] = "NewServer1" Or
Split($,",")[2] = "NewServer2"
Exit
Else
Select
Case Right(Split($,",")[3],1)=1
$NewServerName="NewServer1"
Case Right(Split($,",")[3],1)=3
$NewServerName="NewServer1"
Case Right(Split($,",")[3],1)=5
$NewServerName="NewServer1"
Case Right(Split($,",")[3],1)=7
$NewServerName="NewServer1"
Case Right(Split($,",")[3],1)=9
$NewServerName="NewServer1"
Case 1
$NewServerName="NewServer2"
EndSelect
EndIf
$OldValue = "\\"+$OldServerName+"\"+Split($,",")[3]
$NewValue = "\\"+$NewServerName+"\"+Split($,",")[3]
$rc=DelPrinterConnection("$OldValue")=0
$rc=AddPrinterConnection("$NewValue")=0
EndIf
Next
If you look at the code you will notice that all of our printers end with a Numeric Digit, and that is how we decide what server the printer share would reside on.
_________________________
Today is the tomorrow you worried about yesterday.
|
Top
|
|
|
|
Moderator: Jochen, Allen, Radimus, Glenn Barnas, ShaneEP, Ruud van Velsen, Arend_, Mart
|
0 registered
and 259 anonymous users online.
|
|
|