Я просто хотел бы предвосхитить это, сказав, что я новичок в Powershell и пытался учиться, подбирая вещи здесь и там. В настоящее время я пытаюсь автоматизировать процесс в своей компании, используя строго powershell и Adobe Reader.
Наша компания в настоящее время вручную печатает отдельные наборы записей и отдельную титульную страницу, связывает их и отсылает. Идея автоматизировать этот процесс состояла в том, чтобы заполнить папку заархивированным набором .pdfs в течение дня. Затем этот zip-файл будет извлечен, а его содержимое перемещено в другую папку. PDF-файлы с обычным набором записей, указанным как «Набор WO-xxxxxx» и титульный лист как «Обложка WO-xxxxxx» Все, что мне нужно сделать, это создать простой сценарий, который распечатывает их по порядку, так что «Обложка WO-000001» находится поверх «набора WO-000001», а затем печатает следующий набор в порядке.
Сложность, с которой я столкнулся, заключается в том, что Start-Process -FilePath $File.Fullname -Verb Print
позволяет мне использовать только принтер по умолчанию. Наши обложки нужно будет печатать на более толстой бумаге, и поэтому я подумал, что наилучшим способом будет создание двух принтеров в сети с необходимыми настройками принтера. Если бы я мог переключить сценарий между двумя принтерами на основе имени файла, то это решило бы мою проблему.
Этот скрипт отправляет документы на принтер по порядку, но не заменяет принтер по умолчанию. Я уверен, что это то, что я сделал неправильно в моем командлете IfElse, и был бы признателен экспертам за это.
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
}
}
Любая помощь будет принята с благодарностью.