Functions/Out-PDFToPrinter.ps1
function Out-PDFToPrinter { <# .SYNOPSIS To print a .PDF to the default printer .DESCRIPTION To print a .PDF to the default printer, will use default application to read .PDF files .PARAMETER Path A string or string array of files to print. Accepts paths from pipeline .PARAMETER PrintDelay Integer representing the number of seconds to delay after issuing the command to print the file. Valid range 10-120. .PARAMETER KillProcess Switch to kill the process of the default PDF reader that was started to print the file .EXAMPLE Out-PDFToPrinter -Path file1.pdf, file2.pdf Will open file1.pdf in default PDF reader, print, wait default delay of 10 seconds, then open file2.pdf in default PDF reader, print, wait default delay of 10 seconds and finish. .EXAMPLE Out-PDFToPrinter -Path file1.pdf, file2.pdf -KillProcess -PrintDelay 15 Will open file1.pdf in default PDF reader, print, wait delay of 15 seconds, kill the default PDF reader process, then open file2.pdf in default PDF reader, print, wait delay of 15 seconds, kill the default PDF reader process, and finish. .EXAMPLE Attempt to print two PDF files that do not exist. Out-PDFToPrinter -Path DNE1.pdf, DNE2.pdf -KillProcess -PrintDelay 15 -Verbose VERBOSE: Starting [Out-PDFToPrinter] VERBOSE: PrintDelay [15], KillProcess [True] VERBOSE: Processing [DNE1.pdf] Out-PDFToPrinter : ERROR: path [DNE1.pdf] does not exist, exit processing. At line:1 char:1 + Out-PDFToPrinter -Path DNE1.pdf, DNE2.pdf -KillProcess -PrintDelay 15 - ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Out-PDFToPrinter VERBOSE: Ending [Out-PDFToPrinter] .NOTES Inspired by https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/printing-pdf-files-part-1 Changes * allow for accepting the -Path from the pipeline * test for existence of path, if does not exist throw an error * resolve to list of to use to process the file(s) one at a time * use get-item to determine if file extension is .pdf * stops processing when the first error is encountered #> [CmdletBinding(ConfirmImpact = 'Low')] param( [Parameter(Mandatory, Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string[]] $Path, [ValidateRange(10,120)] [int] $PrintDelay = 10, [switch] $KillProcess ) begin { Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]" Write-Verbose -Message "PrintDelay [$PrintDelay], KillProcess [$KillProcess]" $IsError = $false } process { foreach ($curPath in $Path) { if (-not $IsError) { Write-Verbose -Message "Processing [$curPath]" if (Test-Path -Path $curPath) { $ResolveFile = Resolve-Path -Path $curPath $ResolveFile | ForEach-Object { if (-not $IsError) { $Item = Get-Item -Path $_ if ($Item.Extension -eq '.pdf') { Write-Verbose -Message "Processing [$($Item.Fullname)]" if ($KillProcess) { Start-Process -FilePath $Item.Fullname -Verb Print -PassThru | ForEach-Object { Start-Sleep -Seconds $PrintDelay } | Stop-Process } else { Start-Process -FilePath $Item.Fullname -Verb Print -PassThru | ForEach-Object { Start-Sleep -Seconds $PrintDelay } } } else { Write-Error -Message "Extension [$($Item.Extension)] -ne [.pdf], exit processing." $IsError = $true } } } } else { Write-Error -Message "ERROR: path [$curPath] does not exist, exit processing." $IsError = $true } } } } end { Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]" } } |