Public/Set-SpecDefaultDellorOKIPrinter.ps1
Function Set-SpecDefaultDellOrOKIPrinter { <# .SYNOPSIS Sets the default printer to a NON-STAR printer if the current default printer is either a STAR printer or does not contain an underscore. .DESCRIPTION This function checks for printers that match the specified STAR printer name or do not contain an underscore (_) in their names and sets the first matching NON-STAR printer with "HP_" or "OKI_" in its name as the new default printer. .PARAMETER None This function does not take any parameters. .EXAMPLE Set-SpecDefaultDellOrOKIPrinter # Sets the default printer to a non-STAR printer if the current default printer is either a STAR printer or does not contain an underscore (_). .OUTPUTS System.Int32 Returns one of the following exit codes: - 600: The default printer was successfully changed to a non-STAR printer. - 601: Failed to set the default printer to a new printer. - 602: No changes were needed; the current printer is correctly set as the default. .NOTES Author: owen.heaume Version: - 1.0 - 1.2 Refactor Printui.dll into start-process so it can be tested for with pester #> [cmdletbinding()] param () begin { $MatchPrinterName = "STAR" $currentDefaultPrinter = (Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Default=$true").name Write-Verbose "The current default printer is: $currentDefaultPrinter" } process { # checks to see if a STAR printer is current default for the user - if so it needs to change If ($CurrentDefaultPrinter -match $MatchPrinterName -or $currentDefaultPrinter -notmatch "_") { Write-Verbose "Printer '$currentDefaultPrinter' is currently set to default" # loops through list of printers and sets the first matching NON-STAR printer as the default ForEach ($printer in (Get-Printer).name) { If ($printer -match "HP_" -or $printer -match "OKI_") { Write-Verbose "Default printer being set to new printer $printer" Try { # Define the arguments to be passed to rundll32.exe $arguments = "PRINTUI.DLL,PrintUIEntry", "/y", "/n", $printer # Launch the command using Start-Process Start-Process -FilePath "C:\Windows\System32\rundll32.exe" -ArgumentList $arguments -ErrorAction Stop Start-Sleep 2 $NewDefaultPrinter = (Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Default=$true").name Write-Verbose "New default printer set to: $NewDefaultPrinter" return 600 } Catch { Write-Warning "Failed to set default printer." return 601 } } } } Write-verbose "No changes need to be made - current printer correctly set as default." return 602 } } |