質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

4回答

11163閲覧

Powershell: PDF/XPSファイルを指定した順番で多量印刷したい

退会済みユーザー

退会済みユーザー

総合スコア0

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2016/01/16 09:50

編集2016/01/16 13:37

みなさま、宜しくお願い致します。

###前提・実現したいこと
表題の通り、フォルダー配下のPDF/XPSファイルを一括で、
指定した順番で印刷したいです。
併せて、できれば印刷中の画面(ビューワ自体や印刷設定画面等)は
非表示か、最小化したい。
※少なくともフォアグランド/視認できる様に出てほしくない。

追記:
順番指定は、絶対パスかファイル名を想定しています。
「Get-ChildItem -Recurse | Sort Name」のようなイメージです。

###発生している問題・エラーメッセージ
印刷自体は、問題ありません。
ただ、順番がばらばらになります。
(1ファイル内の順番ではなく、ファイル単位での順番)

たとえば、次のファイル群を印刷したとします。

1.PDF
2.PDF
3.PDF

プリントキューに格納された時点で、、、

3.PDF
1.PDF
2.PDF

プリントアウトされたときは、、、、

3.PDF
1.PDF
2.PDF

恐らく、キューイング時間やファイルサイズ等が
影響していると想像しています。

###ソースコード

powershell

1$FILE_DIR_PATH = $args[0] 2$MOVE_DIR_PATH = $FILE_DIR_PATH + “\printed\” 3Set-Location $FILE_DIR_PATH 4$List = Get-ChildItem $FILE_DIR_PATH | Where-Object {$_.Extension -eq.pdf”} 5if ($List -eq $null) { exit 0 } 6foreach($pdf in $List) 7{ 8 $PrintPdf = Move-Item $(Get-ItemProperty $pdf).FullName $MOVE_DIR_PATH -PassThru 9 Start-Process -FilePath $(Get-ItemProperty $PrintPdf).FullName -verb print 10} 11exit 0

Start-Processで-waitを使ってみましたが、こちらの環境では、
キューイング後、即印刷されない為、使えませんでした。
(プリンター本体に特定操作を行うことで、初めて印刷される)

また、たとえばPDFファイルだと、Acrobat Raderのコマンドライン
オプションを使って、CLI処理を行う方法を試しましたが、
関係なかったです。

追記2:
Start-Processで-waitを使ってみた結果、例に挙げた3つのPDFの
パターンで説明しますと、最初(1番目)がキューイング処理中?
処理後?に止まってしまい、2番目に処理が移りませんでした。
よって、プリンター本体の操作に関係なく、処理が止まる為
使えませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)

Name Value


PSVersion 5.0.10586.0
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.10586.0
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

Google検索すると、”よくある質問”の様ですね。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pi-chan

2016/01/16 10:04

「指定した順番で」というのは具体的にどのように指定するのですか?ファイル名の辞書順ですか?それともフォルダ名も含めた「絶対パス」の辞書順とか、あるいはタイムスタンプ順とかですか?
退会済みユーザー

退会済みユーザー

2016/01/16 11:22

コメントありがとう御座います。 順番とは、絶対パスかファイル名でソートしたいと考えています。 サンプルで提示したソースは、get-childitem等でリストを取得して使うことを 想定していますので、「sort name」等のソートを考えています。
eripong

2016/01/16 12:18

「プリンター本体に特定操作を行うことで、初めて印刷される」というのは、-waitを使わない場合はその特定操作は行う必要はないのですか?
退会済みユーザー

退会済みユーザー

2016/01/16 13:39

コメントありがとう御座います。 waitオプションの件は、質問を修正しまして「追記2」 としております。
guest

回答4

0

解決しました。

頂戴したコメントよりヒントを得まして、印刷データの流れを
再確認しました。
結果、キューイング処理は、スクリプトから監視することが
できました。

1.印刷処理を、Start-Processで発行する。(wait不要)
2.Get-WmiObjectでWin32_PrintJobのJobStatusをチェックする。
3.キューイング処理が完了していれば次の印刷へ

WS2012/8.1ならGet-PrintJobコマンドで行うのもアリだと
思います。

投稿2016/01/31 06:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/03/12 07:16

うーん。。。 なぜか、1処理(1実行+1Enter)で、たいてい最初の方の印刷が欠ける。。。 まれに中間も。。。。キューイング監視だけでは、ダメかな。
guest

0

ぱっと思い付くのは
プリンタのジョブをチェックして前のジョブがなくなるまで次の印刷を待てば良いのではないかと思いますが。。

投稿2016/01/16 10:18

K.iijima

総合スコア103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/16 11:24

コメントありがとう御座います。 「前のジョブがなくなるまで次の印刷を待てば」ですが、 Start-Process オプションの -Wait 同じ動きになると推測します。 この場合、こちらの環境では、採用できません。 ※キューキング後、自動的にプリントアウトはされない(=ジョブは自動でなくならない)為
guest

0

ファイルの印刷一つ一つに対して、Start-Jobコマンドレットを使ってみるってのはどうでしょうか?

投稿2016/02/03 15:19

Takeda_Kazuhito

総合スコア369

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/06 04:23

コメントいただきまして、ありがとう御座います。 Start-Jobコマンドを使うメリットを、ご教示頂けませんか? 今回の処理、ポイントは、 Get-ChildItemでソートした順番で、 印刷キューイングが行われる(=完了する)事です。 印刷ジョブを多量に、効率的に処理する場合、バックグランド処理は、 有意義だと認識しています。 このStart-Jobで、いわゆる先行・後続制御のような事が可能という 事でしょうか? お手数ですが、フォロー頂きたく、宜しくお願い致します。
guest

0

Start-Process のオプションに -Wait を追加してみてはどうでしょうか。それを指定するとプロセスが終了するまで待つようになります。


すみません。-Waitは試したのですね。よく読まずにコメントしてしまいました。

投稿2016/01/16 10:48

編集2016/01/16 10:50
catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問