How to Set Up a Print Server on Windows Server 2012 R2

A centralised print server simplifies printer management across an organisation by hosting print queues, managing drivers, and applying permissions from a single point of administration. Users connect to the print server and their client automatically downloads the appropriate driver. Administrators can monitor print jobs, manage queues, and deploy printer connections via Group Policy — all from one server.

Windows Server 2012 R2 includes the Print and Document Services role with full support for network printers, internet printing (IPP), branch office direct printing, and printer driver isolation to protect the spooler from crashing drivers. This guide covers the complete setup from role installation to Group Policy deployment of printer connections.

Prerequisites

  • Windows Server 2012 R2 joined to the domain.
  • Printer hardware installed and accessible on the network (or directly attached via USB/LPT).
  • Printer manufacturer drivers downloaded for Windows Server 2012 R2 (x64).
  • Domain Administrator account for Group Policy deployment.

Step 1: Install Print and Document Services

# Install the Print Server role with management tools
Install-WindowsFeature -Name Print-Server -IncludeManagementTools

# Also install Internet Printing if needed
Install-WindowsFeature -Name Print-Internet

# Verify the installation
Get-WindowsFeature -Name Print-* | 
    Where-Object { $_.InstallState -eq "Installed" } | 
    Select-Object Name, DisplayName

# Confirm the Print Spooler service is running
Get-Service -Name Spooler | Select-Object Name, Status, StartType

Step 2: Add a Network Printer Port

Before adding a printer, you must create a port that points to the printer’s IP address. The Standard TCP/IP port is used for most network printers.

# Add a Standard TCP/IP port for a network printer
Add-PrinterPort -Name "IP_192.168.1.200" -PrinterHostAddress "192.168.1.200"

# Add a port using LPR (Line Printer Remote) protocol
Add-PrinterPort `
    -Name "LPR_192.168.1.201" `
    -PrinterHostAddress "192.168.1.201" `
    -LprHostPrinter "lp1" `
    -LprMonitorPort 515

# List all printer ports
Get-PrinterPort | Select-Object Name, Description, PrinterHostAddress

Step 3: Install Printer Drivers

Drivers must be installed on the print server before you can add a printer that uses them. For network deployments, also install x86 drivers if you have 32-bit clients.

# List currently installed printer drivers
Get-PrinterDriver | Select-Object Name, PrinterEnvironment | Sort-Object Name

# Install a printer driver from an INF file
Add-PrinterDriver -Name "HP LaserJet 400 M401" -InfPath "C:DriversHPHPLJM401hpljm401.inf"

# Install an in-box driver (already present in Windows)
Add-PrinterDriver -Name "Microsoft XPS Document Writer v4"

# Add an additional driver for x86 clients (run on the print server)
# This requires having the x86 INF available
pnputil /add-driver C:DriversHPx86hpljm401.inf /install

Step 4: Add a Printer to the Print Server

# Add a printer using the port and driver created above
Add-Printer `
    -Name "HP-Laser-Floor1" `
    -PortName "IP_192.168.1.200" `
    -DriverName "HP LaserJet 400 M401" `
    -Shared:$true `
    -ShareName "HP-Laser-Floor1" `
    -Published:$true `
    -Comment "HP LaserJet on Floor 1, Building A" `
    -Location "Building A, Floor 1"

# Add a second printer
Add-Printer `
    -Name "HP-Laser-Floor2" `
    -PortName "IP_192.168.1.201" `
    -DriverName "HP LaserJet 400 M401" `
    -Shared:$true `
    -ShareName "HP-Laser-Floor2" `
    -Published:$true `
    -Location "Building A, Floor 2"

# List all printers on the server
Get-Printer | Select-Object Name, ShareName, PortName, DriverName, Published

Step 5: Configure Printer Permissions

By default, all authenticated users can print. You may want to restrict certain expensive printers (e.g., colour, A3) to specific groups.

# View current printer permissions
$printer = "HP-Laser-Floor1"
$sd = (Get-Printer -Name $printer -Full).PermissionSDDL

# Use Print Management console to set permissions via GUI:
# Server Manager -> Tools -> Print Management -> Printers -> Right-click -> Properties -> Security

# Via CMD / printui (most reliable for ACL changes on printers)
printui /Ss /n "HP-Laser-Floor1" /q

# Grant a specific group print permission using SDDL
# This is typically done through the Print Management GUI for accuracy

For fine-grained permissions, use the Print Management console: navigate to Print Servers → [ServerName] → Printers, right-click the printer, select Properties → Security, and configure per-group access there.

Step 6: Configure Printer Priorities and Schedules

You can create multiple logical printers pointing to the same physical printer and assign different priorities or availability windows to control who gets their jobs printed first.

# Create a high-priority printer for management (priority 99 = highest)
Add-Printer `
    -Name "HP-Laser-Floor1-Priority" `
    -PortName "IP_192.168.1.200" `
    -DriverName "HP LaserJet 400 M401" `
    -Shared:$true `
    -ShareName "HP-Floor1-Mgmt" `
    -Priority 99

# Set the standard printer to lower priority
Set-Printer -Name "HP-Laser-Floor1" -Priority 1

# Set print availability window (e.g., 08:00 to 18:00 only)
Set-Printer `
    -Name "HP-Laser-Floor1" `
    -StartTime "0800" `
    -UntilTime "1800"

Step 7: Deploy Printers via Group Policy

Rather than having users manually connect to print shares, deploy printer connections automatically using Group Policy. User-targeting deploys the printer per user at logon; computer-targeting deploys it when the machine boots.

# In Group Policy Management, create or edit a GPO linked to the target OU
# Navigate to:
# Computer Configuration > Policies > Windows Settings > Printer Connections
# OR
# User Configuration > Policies > Windows Settings > Printer Connections

# The GPO Preferences method is more flexible — set it to:
# User Configuration > Preferences > Control Panel Settings > Printers > New > Shared Printer
# Path: \PRINTSERVERHP-Laser-Floor1
# Action: Create
# Set as default: Yes (for the primary printer)

# Verify group policy deployment on a client
gpresult /r | findstr -i "printer"

# On the print server, view published printers in AD
Get-Printer | Where-Object { $_.Published -eq $true } | 
    Select-Object Name, ShareName, Location

Managing and Monitoring the Print Server

# List all current print jobs across all printers
Get-PrintJob -PrinterName "HP-Laser-Floor1"

# Cancel all jobs in a queue
Get-PrintJob -PrinterName "HP-Laser-Floor1" | Remove-PrintJob

# Restart the Print Spooler service (fixes many common print issues)
Restart-Service -Name Spooler

# Enable printer driver isolation (prevents bad drivers crashing spooler)
Set-PrinterDriver -Name "HP LaserJet 400 M401" -PrinterEnvironment "Windows x64" `
    -MajorVersion 3 -MinorVersion 0

# View printer driver isolation settings
Get-PrinterDriver | Select-Object Name, PrinterEnvironment

# Check spooler event log for errors
Get-EventLog -LogName System -Source "Print Spooler" -EntryType Error -Newest 20

Summary

Setting up a print server on Windows Server 2012 R2 centralises printer management, simplifies driver distribution, and provides a single point of control for access permissions and monitoring. The key steps are: install the Print Server role, create TCP/IP ports for each network printer, install the required x64 (and optionally x86) drivers, add printers as shared and published-to-Active-Directory objects, configure permissions to restrict expensive printers to appropriate groups, and deploy connections via Group Policy Preferences so users receive their printers automatically at logon. Enabling printer driver isolation protects the Print Spooler service from unstable third-party drivers, which is important on servers where spooler stability affects many users simultaneously.