Powershell:自動列印PDF

透過排程去呼叫Powershell自動列印特定資料夾的PDF。
第一個是簡易版的

$adobe='C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\acrord32.exe'
$printername='TWTPENP22501'
$Directory = "D:\Test\"
$PrintedDir = "D:\Printed\"

foreach($File in Get-ChildItem -Path $Directory -Recurse)
{

    Move-Item -Path "$Directory$File" -Destination $PrintedDir -Force
    $arglist='/S /T "{0}" "{1}"' -f "$PrintedDir$File", $printername
    start-Process $adobe -ArgumentList $arglist
}
$sleepcount = $CountFiles.Count + [int]11
Start-Sleep $sleepcount

Remove-Item $PrintedDir\*.pdf -Force -ErrorAction SilentlyContinue

第二個是加入Log的

$adobe='C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\acrord32.exe'
$printername='TWTPENP22501'
$Directory = "D:\Test\"
$PrintedDir = "D:\Printed\"
Function LogWrite
{
    Param([string]$logstring)
    $Logfile = "$PrintedDir"+(Get-date -Format 'yyyy-MM-dd')+".txt"   #LogFile
    Add-content $Logfile "$(Get-date -Format 'yyyy-MM-dd tthh:mm:ss') $logstring" 
}
$CountFiles = Get-ChildItem -Path $Directory | measure
foreach($File in Get-ChildItem -Path $Directory -Recurse)
{
    Move-Item -Path "$Directory$File" -Destination $PrintedDir -Force
    LogWrite "Move $Directory$File to $PrintedDir" 
    $arglist='/S /T "{0}" "{1}"' -f "$PrintedDir$File", $printername
    LogWrite "$arglist"
    start-Process $adobe -ArgumentList $arglist
    LogWrite "Print $File"
}
$Countfilenumber = $CountFiles.Count
$sleepcount = $CountFiles.Count + [int]11
LogWrite "Wait $sleepcount seconds to delete file."
Start-Sleep $sleepcount

foreach($WillDelFile in Get-ChildItem -Path $PrintedDir -Recurse)
{
    LogWrite "$WillDelFile will be delete."
} 
Remove-Item $PrintedDir\*.pdf -Force -ErrorAction SilentlyContinue
LogWrite "There are $Countfilenumber PDF files deleted"

準備列印

送出完成

Log紀錄

Adobe程式位置和印表機名稱請自行修改。
放入排成可以讓他定時檢查

在〈“Powershell:自動列印PDF”〉中有 13 則留言

  1. 你好 我設定完成以後,丟入PDF檔不會自動列印,要在執行一次程式碼才會開始動作,請問不知道哪裡出錯了…

    1. 如果確定執行程式碼可以執行/列印,可能要檢查一下您的排程設定是不是哪裡出錯或是權限問題。

  2. 謝謝回復
    我覺得應該是權限的問題 因為我直接複製只更改位子跟printername而已,如果是權限的問題該如何解決?

  3. start-Process : 無法執行這個命令,因為發生錯誤: 系統找不到指定的檔案。。
    位於 線路:18 字元:5
    + start-Process $adobe -ArgumentList $arglist
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [Start-Process],InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

    有時候執行會跳出這些錯誤代碼…

    1. 你可以嘗試輸出一下整段套了參數之後,是長什麼樣子
      write-host “$adobe -ArgumentList $arglist”

      另外要確認一下你安裝Adobe Reader執行檔的位置是不是在下面的路徑
      C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\acrord32.exe
      如果不是或沒裝Adobe Reader會比較好確認

  4. 謝謝回復
    可以用了但另一台電腦無法使用…
    單獨跑powershell檔可以列印,但放入排程後要列印的檔案會從Test跑到Printed,但沒有在列印…
    不知道哪裡出了問題

  5. 大概是我排程設定錯誤了…
    可以跟我說一下如何正確加入排程嗎?
    謝謝你

  6. PS C:\Windows\system32> write-host “$adobe -ArgumentList $arglist”
    C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\acrord32.exe -ArgumentList /S /T “D:\Printed\19013M.pdf” “FUJI XEROX DocuCentre-VI C2271”

    1. 1.你的排程是run only when user is logged on或是run only when user is logged on or not?這支會打開Adobe reader來列印,它可能需要跟前景互動,所以沒有登入的情況下應該是無法動作的。
      2.試著改一下你的印表機名稱不要讓中間有空白。
      我自己試試沒碰到什麼問題,你的環境是什麼?

  7. 謝謝回復
    我設定run only when user is logged on
    已經可以運作了,但是powershell的視窗執行時會一直跳出來…
    WIN10

    1. 對它會有視窗跳出來,因為它是前景程式,而且會呼叫Adobe Reader執行檔,除非是那種要跑服務的。
      這種通常大部分會用在無人值守的工作機居多。
      如果是有人在用的電腦會感覺到有點厭煩。

  8. 謝謝回復
    我是設定5分鐘跑一次,他5分鐘就會跳一次powershell的視窗出來,可以讓他在後台執行嗎?
    還是有其他比較好的排程方式?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *