How to Set Up Windows Server 2016 Print Server

A Print Server centralizes printer management by hosting printer drivers and queues, making shared printers available to users on the network without requiring each client to install drivers manually. Windows Server 2016 includes the Print and Document Services role for this purpose. This guide covers installing the Print Server role, adding printers, sharing them on the network, configuring printer permissions, deploying printers via Group Policy, and managing print queues.

Step 1: Install the Print and Document Services Role

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

# Optionally install Internet Printing Protocol (IPP) support
Install-WindowsFeature -Name Print-Internet

# Optionally install LPD service for Unix/Linux clients
Install-WindowsFeature -Name Print-LPDSvc

# Verify installation
Get-WindowsFeature -Name Print-Server, Print-Internet | Select-Object Name, InstallState

Step 2: Add a Local Printer with a TCP/IP Port

Most network printers are connected via an IP address on the local network. Create a TCP/IP printer port and then install the printer:

# Add a Standard TCP/IP printer port
Add-PrinterPort -Name "IP_192.168.1.50" -PrinterHostAddress "192.168.1.50"

# Verify the port was added
Get-PrinterPort | Where-Object { $_.Name -like "IP_*" }

# Install the printer driver (if using an INF-based driver)
Add-PrinterDriver -Name "HP Universal Printing PCL 6"

# Add the printer using the port and driver
Add-Printer `
    -Name "Finance Printer" `
    -PortName "IP_192.168.1.50" `
    -DriverName "HP Universal Printing PCL 6" `
    -Comment "HP LaserJet in Finance Department" `
    -Location "2nd Floor, Room 204"

# Verify the printer was added
Get-Printer -Name "Finance Printer" | Select-Object Name, PortName, DriverName, Shared

Step 3: Share the Printer on the Network

# Share the printer and set a share name
Set-Printer -Name "Finance Printer" -Shared $true -ShareName "FinancePrinter"

# Verify sharing is enabled
Get-Printer -Name "Finance Printer" | Select-Object Name, Shared, ShareName

# List all shared printers on this server
Get-Printer | Where-Object { $_.Shared -eq $true } | Select-Object Name, ShareName, PortName

Step 4: Publish Printers in Active Directory

Publishing a printer in Active Directory makes it searchable via the AD directory, allowing users to find printers based on location or capabilities:

# Publish printer in Active Directory
Set-Printer -Name "Finance Printer" -Published $true

# Verify publication
Get-Printer -Name "Finance Printer" | Select-Object Name, Published

# List all AD-published printers
Get-Printer | Where-Object { $_.Published -eq $true }

Step 5: Configure Printer Permissions

By default, everyone can print, but you may need to restrict access or grant management rights to specific groups:

# View current printer permissions using the PrintManagement module
$printer = Get-Printer -Name "Finance Printer" -Full
$printer.PermissionSDDL

# Set custom permissions using SDDL (Security Descriptor Definition Language)
# G:SY = System group, D: = Discretionary ACL
# Allow Print for Finance_Users, Allow ManagePrinter for Domain Admins
Set-Printer -Name "Finance Printer" -PermissionSDDL "G:SYD:(A;;0x69000c0;;;WD)(A;OIIO;0x69000c0;;;WD)(A;;0x60f4c0;;;BA)(A;OIIO;0x60f4c0;;;BA)"

# Alternative: Use the GUI (printmanagement.msc) for easier permission management
# Open Print Management console
printmanagement.msc

Step 6: Set Printer Scheduling and Priority

Configure print availability hours and priority. This is useful when multiple logical printers point to the same physical device — you can prioritize VIP users by giving them a higher-priority printer queue:

# Set printer priority (1 = lowest, 99 = highest)
Set-Printer -Name "Finance Printer" -Priority 50

# Set printer to only be available during business hours (7:00 AM to 7:00 PM)
# StartTime and UntilTime are in minutes from midnight
Set-Printer -Name "Finance Printer" -StartTime 420 -UntilTime 1140

# Remove time restrictions (available always)
Set-Printer -Name "Finance Printer" -StartTime 0 -UntilTime 0

Step 7: Deploy Printers via Group Policy

Group Policy can automatically deploy printers to users or computers based on their OU membership. This eliminates the need for users to manually connect to printers:

# Use the Print Management console to deploy printers via GPO:
# 1. Open printmanagement.msc
# 2. Right-click the shared printer
# 3. Select "Deploy with Group Policy"
# 4. Browse to or create a GPO
# 5. Choose "Per User" or "Per Machine" deployment
# 6. Click Add, then OK

# You can also use Group Policy Preferences from the Group Policy Management Console (GPMC)
# Computer/User Configuration > Preferences > Control Panel Settings > Printers
# This allows conditional printer mapping based on IP range, OU, or security group

Step 8: Manage the Print Queue

# View all print jobs across all printers
Get-PrintJob -PrinterName "Finance Printer"

# View pending jobs
Get-PrintJob -PrinterName "Finance Printer" | Where-Object { $_.JobStatus -ne "Printed" }

# Remove a specific print job (by JobId)
Remove-PrintJob -PrinterName "Finance Printer" -ID 5

# Pause all jobs on a printer
$jobs = Get-PrintJob -PrinterName "Finance Printer"
$jobs | ForEach-Object { Suspend-PrintJob -PrinterName "Finance Printer" -ID $_.Id }

# Resume all jobs
$jobs | ForEach-Object { Resume-PrintJob -PrinterName "Finance Printer" -ID $_.Id }

# Restart the Print Spooler service if it hangs
Restart-Service -Name Spooler -Force

Step 9: Install Additional Printer Drivers for Different Client Architectures

Windows Server 2016 can host 64-bit and 32-bit printer drivers simultaneously so that both 32-bit and 64-bit Windows clients can download the correct driver automatically:

# Add an x86 (32-bit) driver for a printer
Add-PrinterDriver -Name "HP Universal Printing PCL 6" -InfPath "C:DriversHP_PCL6_x86hpcu238u.inf" -PrinterEnvironment "Windows x86"

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

Step 10: Monitor Print Server with Event Logs

# Enable Microsoft-Windows-PrintService operational log
wevtutil sl Microsoft-Windows-PrintService/Operational /e:true

# View recent print events
Get-WinEvent -LogName "Microsoft-Windows-PrintService/Operational" -MaxEvents 30 | `
    Select-Object TimeCreated, Id, Message | Format-Table -Wrap

# View printer-related system events
Get-EventLog -LogName System -Source "Print" -Newest 20 | Select-Object TimeGenerated, EntryType, Message

The Windows Server 2016 Print Server is now configured and ready to serve printers across the network. Printers are shared, published in Active Directory, and have appropriate access controls. Group Policy deployment automates printer mapping for users, and print queue management tools keep operations running smoothly. Regularly check the print spooler and event logs to catch issues before they affect productivity.