首页 > 解决方案 > PowerShell干净地打印文件夹中的所有pdf

问题描述

目标:使用 PowerShell 将文件夹中的所有 PDF 文件打印到用户选择的打印机的模块

问题:是否有更简洁的方法来打印 100 多个 PDF 文件而无需直接调用 acrobat?

当前方法:( 向下滚动查看完整功能)

Start-Process -FilePath $obj.FilePath -Verb PrintTo $obj.PrinterName

通常需要打印 500 个或更多文件。使用当前方法,PC 需要:

这可能真的很慢,有时 adobe 崩溃并且发出打印的文件刚刚被终止。我以为我可以Start-Job | Wait-Job | Receive-Job用来监视状态并确认作业已完成,但事实证明,一旦将命令发送到 adobe,作业就被认为已完成,并使我们回到 adobe 崩溃和未打印文件的可能性。我也尝试过发出-Passthru-Wait监控进程的Start-Process命令,没有运气,回到上面的问题。

不要误会我的意思,以下是功能性的,但不实用,并且有很多不足之处。

笔记:

Function PrintFilesInFolder
{
    Param
    (
        [Parameter(Mandatory=$true)]
        [String[]] $pathToFiles,
        [Parameter(Mandatory=$true)]
        [String] $fileTypeToProcess
    )
    Get-Printer | Out-GridView -OutputMode Single | 
    ForEach-Object {
        $printname = $_.Name
        $files = Get-ChildItem "$pathToFiles$fileTypeToProcess"
        $NumberOfFiles = $files.Length
        $interval = $NumberOfFiles / 100
        $count = 0
        
            $files | ForEach-Object {
                $percent = $count * 100 / $files.Length
                $obj = New-Object PSObject
                $obj | Add-Member -MemberType NoteProperty -Name “FilePath” -Value $_.FullName
                $obj | Add-Member -MemberType NoteProperty -Name “PrinterName” -Value $printname

                $job = Start-Job {
                    param(
                        $obj
                    )
                    Start-Process -FilePath $obj.FilePath -Verb PrintTo $obj.PrinterName
                } -ArgumentList $obj | Wait-Job
                
            
                if(($count % $interval -eq 0) -or ($count -le 10)){
                    Write-Progress -Activity "Processing $count of $NumberOfFiles" -Status "Processing $_" -PercentComplete $percent
                }
                $count += 1
            }
    }

}

标签: powershellpdfautomation

解决方案


推荐阅读