Skip to content

Set-DefaultPrinter

Print Management: Sets the default printer

#Requires -Version 5.1

[CmdletBinding()]
Param(
    [Parameter(Mandatory = $true)]
    [string]$PrinterName,
    [switch]$UseWmi
)

Process {
    try {
        if ($UseWmi) {
            $prObj = Get-CimInstance -Class Win32_Printer -Filter "Name='$PrinterName'" -ErrorAction Stop
            if ($null -eq $prObj) { throw "Printer '$PrinterName' not found" }
            Invoke-CimMethod -InputObject $prObj -MethodName SetDefaultPrinter -ErrorAction Stop | Out-Null
        }
        else {
            [System.Reflection.Assembly]::LoadWithPartialName('System.Printing') | Out-Null
            $quTypes = @([System.Printing.EnumeratedPrintQueueTypes]::Connections, [System.Printing.EnumeratedPrintQueueTypes]::Local)
            $prs = New-Object System.Printing.PrintServer
            $col = $prs.GetPrintQueues($quTypes)
            $prQueue = $col | Where-Object { $_.FullName -eq $PrinterName }
            if ($null -eq $prQueue) { throw "Printer '$PrinterName' not found" }
            $localPS = New-Object System.Printing.LocalPrintServer
            $localPS.DefaultPrintQueue = [System.Printing.PrintQueue]$prQueue
            $localPS.Commit()
            $localPS.Dispose()
            $prQueue.Dispose()
            $col.Dispose()
            $prs.Dispose()
        }
        [PSCustomObject]@{ Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"; Status = "Success"; PrinterName = $PrinterName; Message = "Printer '$PrinterName' set as default" }
    }
    catch { throw }
}

Full name of the printer to set as default

Off

Use WMI instead of .NET to set the default printer

An interactive directory of PowerShell scripts.