[サイトリニューアル]記事URLが変更になりました。旧URLへのアクセスはトップページへ転送されます。お探しの記事は「サイト内検索」をご利用ください。

LINE処方箋自動印刷システム自作(最終回:PowerShell編 ~PCを自動印刷ロボットにする~)

薬局とIT
スポンサーリンク

AIは完璧なコードをくれた。でも、動かない。


前回までで、「LINEに画像を送る」→「Googleドライブに保存される」ところまでは完成しました。 あとは、この画像を 「Windows PCが勝手に検知して印刷する」 だけです。

「Googleドライブのフォルダを監視して、新しい画像が来たら印刷して、終わったら移動させるスクリプト書いて」 。AIにそうお願いすると、数秒でPowerShellのコードが返ってきました。

「なんだ、楽勝じゃん」 そう思った私が甘かったです。ここからが「Windowsの仕様」との泥沼の戦いの始まりでした。

完成コードはこちら

最初に、今回使う完成品のコードをお見せします。完成品とドヤ顔をしてお見せしますが、全部AIが書いたものです。これを動かすのが今日のゴールです。

前提条件:
PCに「Google Drive デスクトップ版」がインストールされていること(Gドライブ等で見られる状態)。
Googleドライブ内に「Rx_Inbox(受信)」と「Rx_Done(印刷済)」というフォルダがあること。

※ 当初はWindows付属のペイントを使って印刷していましたが(アイキャッチ画像はそのため)、このコードはドライバを直接叩くように変わっています。

# ▼設定エリア
# Googleドライブが「G」以外ならここを変えてください
$watchPath = "G:\マイドライブ\Rx_Inbox"
$movePath  = "G:\マイドライブ\Rx_Done"

# 【重要】プリンターのIPアドレス(PCからpingが通るか確認)
$targetIP = "192.168.1.000" 
# ▲設定エリア終了

# 文字化け対策
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(932)

Write-Host "処方箋 自動印刷システム(監視用PC版)を起動中..." -ForegroundColor Cyan
Write-Host "ターゲットIP: $targetIP"
Write-Host "PC起動後の待機中(30秒)..." -ForegroundColor Gray

# 起動直後のドライバ読み込み・Wi-Fi接続待ち
Start-Sleep -Seconds 30

Write-Host "監視を開始します: $watchPath"

while ($true) {
    if (Test-Path $watchPath) {
        $files = Get-ChildItem -Path $watchPath -Filter "*.jpg"
        
        foreach ($file in $files) {
            try {
                # IPアドレスを含むプリンターを自動で探す
                $printer = Get-WmiObject Win32_Printer | Where-Object { $_.PortName -like "*$targetIP*" } | Select-Object -First 1
                
                if ($printer) {
                    Write-Host "検知: $($file.Name)" -ForegroundColor Yellow
                    Write-Host "  └ プリンター名: $($printer.Name)" -ForegroundColor Cyan
                    
                    # 印刷実行
                    $arg = "C:\WINDOWS\system32\shimgvw.dll,ImageView_PrintTo `"$($file.FullName)`" `"$($printer.Name)`""
                    Start-Process -FilePath "rundll32.exe" -ArgumentList $arg -Wait
                    
                    Start-Sleep -Seconds 6
                    
                    # 移動
                    Move-Item -Path $file.FullName -Destination $movePath -Force
                    Write-Host "  └ 完了: 移動しました" -ForegroundColor Green
                } else {
                    Write-Host "エラー: 指定IP($targetIP)のプリンターが見つかりません。ドライバは入っていますか?" -ForegroundColor Red
                }
            }
            catch {
                Write-Host "エラー: $($_.Exception.Message)" -ForegroundColor Red
            }
        }
    } else {
        Write-Host "エラー: Googleドライブ(G:)が見つかりません" -ForegroundColor Red
    }
    Start-Sleep -Seconds 5
}

このコードをメモ帳に貼り付けて、保存して実行するだけ……のはずでした。

私がハマった「3つの落とし穴」、きっと苦労するポイントだと思いますので、ご紹介します。

罠1:画面が真っ赤に!「実行ポリシー」の壁

保存したファイルを右クリックして「PowerShellで実行」を押した瞬間、黒い画面に 真っ赤な文字で大量のエラー が表示され、一瞬で消えてしまいました。

「ウイルスか!?」と焦りましたが、違います。 Windowsはセキュリティのため、「自作のスクリプトは勝手に実行させない」 という設定がデフォルトになっているのです。

【解決策】 PowerShellを「管理者として実行」で立ち上げ、以下の一文を1度だけ入力する必要がありました。

Set-ExecutionPolicy RemoteSigned 

これを知らないと、永遠に動きません。

罠2:日本語が文字化け?「UTF-8」の呪い


エラーが消えたと思ったら、今度は文字化けのエラー。 パスは合っているはずなのに……よく見ると、フォルダ名の日本語部分(「マイドライブ」など)が変な記号に文字化けしていました。

原因は 「文字コード」 です。 Windowsのメモ帳は、保存形式を意識しないと「UTF-8」で保存しますが、古いPowerShellの設定と食い違って文字化けすることがあるのです。

【解決策】 メモ帳で保存する際、「名前を付けて保存」 の画面下部にある「エンコード」を 「UTF-8 (BOM付き)」 ではなく、 「ANSI」 (Shift-JIS)に変えることで解決しました。ここ、地味ですがハマります。

罠3:朝起きたら「メモ帳」が開いていた

「よし、動いた!」 何回か自分でLINEを送って自動印刷が動くことを確認します。安心して、このファイルを「スタートアップ(PC起動時に自動実行するフォルダ)」に入れました。 次の日の朝、薬局のPCを立ち上げると……

画面には、黒い実行画面ではなく、「ただコードが書かれたメモ帳」がポツンと開いていました。

Windowsにとっては、「.ps1 ファイル? ああ、これはテキストファイルだね。中身を見せてあげるよ」という親切心だったのです。 いや、読んでほしいんじゃない、実行してほしいんだ!

【解決策】 スタートアップに入れるのは、ファイルそのものではなく、「ショートカット」です。 しかもただのショートカットではなく、リンク先を以下のように書き換える必要がありました。

powershell.exe -ExecutionPolicy Bypass -File "C:\保存場所\AutoPrint.ps1"

ここまでやって初めて、PC起動と同時に「黒い画面」が立ち上がり、監視が始まるようになりました。

以下、正しい設定手順(完全版)です。私の屍を越えて、お読みの皆さんは最短ルートで進んでください。

手順1:ファイルを作成する

メモ帳を開き、上記のコードを貼り付けます。

パスはご自分の環境に合わせて書き換えてください。

「名前を付けて保存」 を選び、ファイル名を「AutoPrint.ps1 」に(拡張子を.txtにしない!)。

ファイルの種類:「すべてのファイル」、エンコード: 「ANSI」 (またはShift-JIS) ※ここ重要!

デスクトップなどの消さない場所に保存します。

手順2:実行許可を与える(初回のみ)

スタートメニューを右クリック → 「PowerShell (管理者)」 または「ターミナル(管理者)」を開きます。

Set-ExecutionPolicy RemoteSigned

と入力してEnter。

「よろしいですか?」と聞かれたら Y を押してEnter。

手順3:テスト実行

作成した AutoPrint.ps1 を右クリックして 「PowerShell で実行」 をクリックします。 青い(または黒い)画面が出て、「監視フォルダ…」と表示されれば成功です! スマホからLINEで画像を送ってみてください。プリンターが動き出す感動の瞬間です。

手順4:自動起動の設定(ショートカットの作成)

AutoPrint.ps1 を右クリック → 「ショートカットの作成」。

できたショートカットを右クリック → 「プロパティ」。

「リンク先」の欄の先頭に powershell.exe -File を追記します。

例:

powershell.exe -File "C:\Users\User\Desktop\AutoPrint.ps1"

このショートカットを、スタートアップフォルダ(Winキー + R → shell:startup で開く)に入れます。

自動印刷システム設定をを終えて

こうして、私の薬局には 「LINEで処方箋を送ると、勝手に印刷されて、患者さんに自動返信するシステム」 が完成しました。

かかった費用は 0円。 必要なのは、少しの根気と、AIに質問する勇気、そして数々のエラーにめげない心です。

導入してから、業務フローは劇的に変わりました。 「あ、LINEきてる。印刷しなきゃ」という作業がゼロになり、プリンタの前に行けばもう紙が出ている。 この便利さを、ぜひ全国の薬局の皆さんにも味わってほしいと思います。

もし途中で詰まったら? 大丈夫、今はGeminiやChatGPTという最強の助手がついています。エラーメッセージをそのままコピペして相談すれば、きっと答えを教えてくれますよ。

Anout us

このブログを書いている人
くま☆

薬局で働く薬剤師
「薬局のオモテとウラ」(2006~)
日経DI:熊谷信の「薬剤師的にどうでしょう」連載中(2009~)
詳しくはこちら

くま☆をフォローする

定期購読にオススメの1冊


調剤と情報 薬局 Rp.+(レシピプラス) 日経DI 月刊薬事
タイトルとURLをコピーしました