Recently ran into an environment where there was a print server installed and managing all 200 printers however some users (380 computers) still had printers installed locally and were printing directly to the printer through the IP address or host name. This can cause issues with permissions, driver updates, or logging.
Instead of manually touching each computer I created a PowerShell script to verify it was a network printer installed locally and if it existed on the print server to install it for the user, reducing phone calls to the help desk. The script also confirms they are on the corporate network to continue and run and also verifies the printer is online so that it doesn’t remove personal printers that may have been installed for home use.
1: #Only run if on the corporate network to prevent removing personal printers
2: $Continue = $false
3:
4: $DNSAddresses = Get-DNSClientServerAddress | Select-Object -ExpandProperty ServerAddresses
5:
6: foreach ($DNSAddresses in $DNSAddresses)
7: {
8: #Check DNS server IP to ensure on corporate network
9: if($DNSAddresses -eq "192.168.x.x")
10: {
11: $Continue = $true
12: Write-Host "We are on corporate network, continuing.."
13: break
14: }
15: }
16:
17: if($Continue -eq $true)
18: {
19: $LocalPrinters = Get-Printer
20:
21: foreach ($printer in $LocalPrinters)
22: {
23: if($printer.Type -eq 'Local')
24: {
25:
26: $Port = $printer.PortName.Split("_")
27:
28: #Checking if a live printer on corporate network
29: $ConnectionResults = Test-Connection $Port[0] -Count 1 -Quiet
30:
31: #Checking if printer is a network printer
32: if($ConnectionResults -eq $true)
33: {
34: Write-Host "Deleting printer: " $printer.Name
35: Remove-Printer -Name $printer.Name
36:
37: #Checking if printer is on print server so we can re-add it
38: $PrintServerPrinterPortName = Get-Printer -ComputerName "printserver.domain.org" -Name $Port[0]
39:
40: Write-Host "Printers found on print server with same port name: "$PrintServerPrinterPortName.Count
41:
42: if($PrintServerPrinterPortName.Count -gt 0)
43: {
44: $AddPrinter = "\\printserver.domain.org\" + $Port[0]
45: Write-Host "Adding printer from print server: " + $AddPrinter
46:
47: Add-Printer -ConnectionName $AddPrinter
48: }
49: else
50: {
51: Write-Host "Did not find printer on print server with same port name. Checking printer name."
52: $PrintServerPrinterName = Get-Printer -ComputerName "printserver.domain.org" -Name $printer.Name
53:
54: Write-Host Write-Host "Printers found on print server with same printer name: "$PrintServerPrinterName.Count
55:
56: if($PrintServerPrinterName.Count -gt 0)
57: {
58: $AddPrinter = "\\printserver.domain.org\" +$printer.Name
59: Write-Host "Adding printer from print server: " + $AddPrinter
60:
61: Add-Printer -ConnectionName $AddPrinter
62: }
63: else
64: {
65: Write-Host "Exhausted all options and no printers found."
66: }
67: }
68: }
69: }
70: }
71: }
72: