【发布时间】:2018-06-27 16:53:24
【问题描述】:
我只想先说我是 Powershell 的新手,并且一直在尝试通过到处学习来学习。我目前正在尝试使用严格的 powershell 和 Adobe reader 来自动化我公司内的流程。
我们公司目前正在手动打印单独的记录集和单独的封面,将它们装订并寄出。自动化这个过程的一个想法是用一组压缩的 .pdf 文件填充一个文件夹。然后将提取此 zip 文件并将其内容移动到另一个文件夹。正常记录集列为“WO-xxxxxx Set”,封面列为“WO-xxxxxx Cover”的 PDF。我需要做的就是创建一个简单的脚本,按顺序打印出来,这样“WO-000001 Cover”就在“WO-000001 Set”之上,然后按顺序打印下一组。
我遇到的复杂情况是Start-Process -FilePath $File.Fullname -Verb Print 只允许我定位默认打印机。我们的封面需要打印在较厚的纸张上,因此我认为最好的做法是在网络上创建两台具有所需打印机设置的打印机。如果我可以根据文件名在两台打印机之间交换脚本,那么它将解决我的问题。
此脚本按顺序将文档发送到打印机,但实际上并未交换默认打印机。我确定这是我在 IfElse cmdlet 中做错的事情,希望专家对此给予关注。
Function UnZipEverything($src, $dest)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
$zps = Get-ChildItem $src -Filter *.zip
foreach ($zp IN $zps)
{
$all = $src + $zp
[System.IO.Compression.ZipFile]::ExtractToDirectory($all, $dest)
}
}
UnZipEverything -src "C:\Users\admin\Desktop\Zip Test\" -dest'C:\Users\admin\Desktop\UnZip Test\'
Remove-Item "C:\Users\admin\Desktop\Zip Test\*.zip"
$files = Get-ChildItem “C:\Users\admin\Desktop\UnZip Test\*.*” -Recurse
ForEach ($file in $files){
If ($files -eq '*Cover*') {
(New-Object -ComObject WScript.Network).SetDefaultPrinter('Test')
Start-Process -FilePath $File.FullName -Verb Print -PassThru | %{ sleep 10;$_ } | kill
(New-Object -ComObject WScript.Network).SetDefaultPrinter('\\RFC-Print01\Collections Tray 6')
}
Else {Start-Process -FilePath $File.FullName -Verb Print -PassThru | %{ sleep 10;$_ } | kill
}
}
任何帮助将不胜感激。
【问题讨论】:
-
将
If ($files -eq '*Cover*') {更改为If ($file.BaseName -like '*Cover') {但不是不断切换打印机,我之前只选择 gci 中的 Covers
标签: powershell pdf printing