powershell - PowerShell干净地打印文件夹中的所有pdf
问题描述
目标:使用 PowerShell 将文件夹中的所有 PDF 文件打印到用户选择的打印机的模块
问题:是否有更简洁的方法来打印 100 多个 PDF 文件而无需直接调用 acrobat?
当前方法:( 向下滚动查看完整功能)
Start-Process -FilePath $obj.FilePath -Verb PrintTo $obj.PrinterName
通常需要打印 500 个或更多文件。使用当前方法,PC 需要:
- 打开 Acrobat
- 发行印刷品
- 等待 adobe 发送到打印机
这可能真的很慢,有时 adobe 崩溃并且发出打印的文件刚刚被终止。我以为我可以Start-Job | Wait-Job | Receive-Job
用来监视状态并确认作业已完成,但事实证明,一旦将命令发送到 adobe,作业就被认为已完成,并使我们回到 adobe 崩溃和未打印文件的可能性。我也尝试过发出-Passthru
或-Wait
监控进程的Start-Process
命令,没有运气,回到上面的问题。
不要误会我的意思,以下是功能性的,但不实用,并且有很多不足之处。
笔记:
- 选择打印机
Get-Printer | Out-GridView -OutputMode Single |
- 它通过管道传输到 a
ForEach-Object
,这是由于可能使用-OutputMode Multiple
- 该脚本对
Write-Progress
- 结束模块将允许将文件路径列表通过管道传递给调用的函数:
PrintFilesInFolder -pathToFiles "\\path\to\files\" -fileTypeToProcess "*.pdf"
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
}
}
}
解决方案
推荐阅读
- c++ - 理解 iterator/const_iterator 的实现
- android - 广播接收器根据从服务到片段的改造 2 调用的响应发送广播的问题
- c++ - 如何在 xstring 中处理此异常?
- java - 如何在java中调用泛型类型的方法?
- qt - QTextTable中的交替行背景
- php - 项目缺少默认错误模板 Symfony
- vb.net - 消息框和运行时错误窗口如何在 VB .NET 中本地化?
- delphi - 如何将枚举类型作为方法的参数传递?
- android - 微调器上的自定义 ArrayAdapter 显示微调器外部的自定义布局图像
- c# - WPF 将鼠标滚轮事件从 ContextMenu 发送到 Window