A customer was running an old 2003 as a print server and we were migrating to 2008 R2. The old Print Migrator 3.1 is a big no-no and it will probably crash your spooler – here’s why.

After adding the role Print and Document Services -> Print Server role, you can simply right-click and choose Migrate Printers… and the wizard will allow you to export printers from a local or remote server to a file and then simply import it afterwards:

But if you want more control and more features, use PRINTBRM.EXE in C:\Windows\system32\spool\tools\.

To export from a remote server to a file named printers.printerExport, simply run:

PrintBrm.exe -B -S \\OLDSERVER -F printers.printerExport

If you want to check what’s in the exported file afterwards:

PrintBrm.exe -Q -F PRINTERS.printerExport

And to restore the printers to the local server:

PrintBrm.exe -R -F PRINTERS.printerExport

Now, so far pretty basic stuff. But usually, when you get a new shiny printer server installed, maybe you want to update all the printer drivers? Maybe even some drivers can’t be installed on 2008 R2. So maybe you want to start fresh but you still don’t want to add all printers (with share) and ports manually but you’re OK with adding the drivers manually?

One feature when exporting is to add the -nobin. This will export everything except the binaries (drivers). If you would import that straight away, you would get a lot of errors:

Failed to restore print queue PRINTERNAME. Error 0x80070705
...and...
PRINTERNAME  Error: 0x80070705
The printer driver is unknown.
...and...
HP LaserJet 4, Windows NT x86, None     Error: 0x80070057
The parameter is incorrect.

What you can do then is to manually install the drivers and create a “drivemap” where you tell the import that instead of using the driver in the export file, it will add the printer with a new driver. What you need is a configfile, by default it will use BrmConfig.xml. In the following example you will see it will replace the Ricoh PCL5e driver with the PCL6 and also replace the HP LaserJet4 with the RICOH PCL6 (which is less likely to work.. but for this demo it’ll do :)).

<BrmConfig>
 <PLUGINS>
 </PLUGINS>

 <LanguageMonitors>
 </LanguageMonitors>

 <DriverMap>
 <DRV old="RICOH Aficio MP 161 PCL 5e" new="RICOH Aficio MP 161 PCL 6"/>
 <DRV old="HP LaserJet 4" new="RICOH Aficio MP 161 PCL 6"/>
 </DriverMap>

</BrmConfig>

Then at import, use the -C to specify your config file:

PrintBrm.exe -R -F printers.printerExport -C BrmConfig.xml

You will then notice, while restoring, it will instead of failed to restore print queue get:

Restored print queue PRINTERNAME

When you check the installed printer you will notice it has used the replacement driver.

And while you’re at it, read some Best Practices. Oh and don’t forget, sometimes you need to run the cmd.exe as an Administrator.

Happy printing!