スキャン機能を備えたネットワークMFPの自動接続[パート1]

HP LaserJet 1522、1536、3052 / 3055、300 / 400カラー...



多くのシステム管理者は、ヘッダーに記述されているMFIを知っていると思います。まず第一に、それらは非常に便利なインストールではなく、このことで有名です。 約300メガバイトのMFPのフルソリューションパッケージを狭いチャネルを介して次のコンピューターにコピーすると、このインストーラーを分解してインストールを自動化するというアイデアが浮かびました。作業を中断する必要がありました。







私はすでに約1年半前にドライバーを分析していましたが、このトピックに関するインターネットは完全に空でした。 今、私はすぐに私が知っているユーティリティキーワードを使用してグーグルで検索し、いくつかの散在する情報を見つけました。 それにもかかわらず、私は決めました。 この投稿ではより完全であるという事実にもかかわらず、1か所で収集された情報は依然として害を及ぼさないということです。



印刷を設定する



HP LaserJet 1536 MFPはsnmpを最初に要求し、それから始めることにしました。 最初に理解する必要があります。 Windows 7でプリンターとして接続する方法。 私はすぐに古いXP、ドメイン内の新しいWindows 8を捨てました、意見があります、私は決して見ないでしょう。 それが、私が自分で新しいPowerShellに慣れる理由だと思いました。最終的には、ドライバーを解析する主な動機になったと思います。 Windows 7でのip-printerの接続は、3つの段階で構成されます(Windows 8では、組み込みのコマンドレットによりすべてが大幅に簡素化されますが、既に説明しました-運命ではありません)、まずip-portを作成し、ドライバーを追加してプリンター自体を接続します これらのすべての段階で、Windowsには既製のVBSスクリプトがあります。多くの場合、Windows 7ではCBS \ Windows \ System32 \ Printing_Admin_Scripts \



ポートを作成することから始めます。このステップは最も簡単です。ipと同じ名前を割り当てます。

cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prnport.vbs -a -r "192.168.0.30" -h "192.168.0.30" -o RAW -n 9100









ドライバーの追加:

cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prndrvr.vbs -a -m "HP LaserJet M1530 MFP Series PCL 6" -e "Windows NT x86" -h "C:\drivers\1536\"-i "C:\drivers\1536\hpc1530c.inf"











ここで重要な機能の1つに注意する必要があります:プリンター名は、ドライバーのinfファイルに記述されているとおりに正確に指定する必要があります。たとえば、名前の一部を削除すると、スクリプトはエラーを生成します:「HP LaserJetプリンタードライバーWin32エラーコード87を追加できませんでした」。



完全なプリンター名を持つドライバーファイルからの抜粋:







プリンタを接続する必要があります。このため、私は素晴らしいprintuiプログラムに決めました。興味深いキーがあるので、詳しく見ることをお勧めします。

&rundll32 printui.dll,PrintUIEntry /if /b "HP LaserJet M1530 MFP Series PCL 6" /r "192.168.0.30" /m "HP LaserJet M1530 MFP Series PCL 6" /u /K /q /Gw







これらすべてを次のPowerShellスクリプトのようなものに入れる時が来ました。



 function Add-PrinterPort ($printersource) { cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prnport.vbs ` -a -r $printersource -h $printersource -o RAW -n 9100 | Out-Null } function Add-PrinterDriver ($printername, $driverpath) { $folder = Split-Path $driverPath cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prndrvr.vbs ` -a -m $printername -e Get-Platform -h $folder -i $driverpath } function Get-Platform { if ([System.Environment]::Is64BitOperatingSystem) { "Windows x64" } else { "Windows NT x86" } } Add-Type -As Microsoft.VisualBasic $printerSource = [Microsoft.VisualBasic.Interaction]::InputBox(" IP  .") if ($printerSource -match "^192\.168\.0\.[0-9]{1,3}$") { $printername = "HP LaserJet M1530 MFP Series PCL 6" $driverpath = "C:\drivers\1536\hpc1530c.inf" Add-PrinterPort $printersource Add-PrinterDriver $printername $driverpath #  &         &rundll32 printui.dll,PrintUIEntry /if /b $printername /r $printersource /m $printername /u /K /q /Gw Start-Sleep -Seconds 10 }
      
      











スキャン



ドライバーのinfファイルを掘り下げて正しいプリンター名を見つけ、偶然にもHPドライバーの構造を理解し、次の行に注目しました(太字で強調表示)。



; Windows Vista

[HP.NT.6.0]

「HP LJ M1530 MFPシリーズスキャン」= WIA_1530_Inst.NT.6.0、USB \ vid_03f0&pid_012a&mi_00

「HP LJ M1530 MFPシリーズスキャン」= WIA_1530_NW.NT.6.0、 vid_03f0&pid_012a&IP_SCAN



; Windows Vista 64

[HP.NTAMD64.6.0]

「HP LJ M1530 MFPシリーズスキャン」= WIA_1530_Inst_Vista64、USB \ vid_03f0&pid_012a&mi_00

「HP LJ M1530 MFPシリーズスキャン」= WIA_1530_NW_Vista64、 vid_03f0&pid_012a&IP_SCAN





ここで歌詞をお願いします(1Cはそれと何の関係があるのでしょうか?もしあなたが私の言いたいことを知っているなら)、私はドライス​​テートメントに行きます:devcon.exeを試してみましょう。



DevConは、デバイスマネージャーの代替として使用されるコマンドラインプログラムで、個々のデバイスまたはデバイスのグループをオン、オフ、再起動、更新、削除、およびクエリするために使用できます。 DevConは、デバイスマネージャーでは利用できないドライバー固有の情報も提供します。



support.microsoft.com/kb/311272/en


ドライバーを示すIDでデバイスを追加します。



.\devcon.exe /r install C:\drivers\1536scan\hppasc16.inf "vid_03f0&pid_012a&IP_SCAN"







必要なパラメーターをレジストリに追加し、スキャンを実行して... Bingo!

スキャナーは正常に動作しますが、これをすべて整理する必要があります。



レジストリ内のスキャナー設定は、次の方法で保存されます。

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Class \ {6BDD1FC6-810F-11D0-BEC7-08002BE2092F}

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ Root \ IMAGE



経験的に、必要なレジストリキーを決定します。











レジストリ設定を簡単に追加するには、以下に引用するファイルを作成します。これは、スクリプト内で変更するためのテンプレートとして機能します。



Windowsレジストリエディターバージョン5.00



[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Class \ {6BDD1FC6-810F-11D0-BEC7-08002BE2092F} \ _ ITEM_ \ DeviceData]

"NetworkDeviceID" = "\\ホスト名:_NETWORK_NAME_.domain.local \\ ipaddr:_IP_ADDRESS _ \\ guid:\\ macaddr:_MAC_ADDRESS _ \\ポート:1"

「PortID」=「_ IP_ADDRESS_」

「NetworkHostName」=「_ NETWORK_NAME_.domain.local」

「TulipIOType」= dword:00000005



[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ Root \ IMAGE \ _ITEM_ \ Device Parameters]

"NetworkDeviceID" = "\\ホスト名:_NETWORK_NAME_.domain.local \\ ipaddr:_IP_ADDRESS _ \\ guid:\\ macaddr:_MAC_ADDRESS _ \\ポート:1"

「PortID」=「_ IP_ADDRESS_」

「NetworkHostName」=「_ NETWORK_NAME_.domain.local」

「MAC」=「_ MAC_ADDRESS_」

"PortNumber" = "1"

「インデックス」=「_ ITEM_」




スキャナーをインストールするための完成したスクリプトは、次の形式を取ります。



 $IP_ADDRESS = "192.168.0.30" $MAC_ADDRESS = "001b00b2cc00" $NETWORK_NAME = "NPI3CPOF7" $source = "C:\drivers\1536scan" $dest = Join-Path (Get-Location).path "\temporary" Copy-Item $source $dest -Recurse -Force $dest = Join-Path $dest "\hppasc16.inf" # devcon       & .\devcon.exe /r install $dest "vid_03f0&pid_012a&IP_SCAN" $item = Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Control\Class\"{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}" | Select-Object -Last 1 $item = $item.Substring($item.Length-4, 4) $pattern = ".\temporary\1536.reg" $result = ".\temporary\res.reg" Get-Content $pattern | ForEach-Object { $_ -replace "_IP_ADDRESS_", $IP_ADDRESS ` -replace "_MAC_ADDRESS_", $MAC_ADDRESS ` -replace "_NETWORK_NAME_", $NETWORK_NAME ` -replace "_ITEM_", $item } | Set-Content $result & regedit /s .\temporary\res.reg
      
      







私たちは手をこすり、チェックします-それは動作します、1522年にそれを修正します-それは動作します、私たちは勝ち誇って3055年に支配します-残念...

スキャナーではタブレットを選択できません。スキャンメニューで使用できるのはフィーダーのみであり、スキャンを拒否します。







3055との深刻な会話、または、おい、間違った石を山に上げた









ここで彼は、LaserJet 3055/3052-最も有害な男です。驚いたことに、私は彼を最もよく見かけます。 実際、秘密をお話しします-最初に対処しました-ドライバーをインストールするときにprocmon出力をフィルタリングするジャングルを通過して、何か面白いものを見つけ、途中でdr死しました。 procmonが記憶不足のために再び落ちたとき、私はこのベンチャーをより友好的で穏やかな状態に延期することにしました。



MFPインストーラーの分析に対する2回目の襲撃では、結果が得られました。インストーラーの出力の腸のログを1時間半解析した後、真珠が見つかりました-hppniscan01.exe

必要なパラメーターを使用して実行すると、スキャナーがデバイスに即座にインストールされ、必要なレジストリブランチが登録されました。

hppniscan01.exe -f "hppasc16.inf" -m "vid_03f0&pid_012a&IP_SCAN" -a "192.168.0.30" -n 1













他のHPプリンターのドライバー配布には64ビットバージョンがありますが、3055ドライバーはx86オペレーティングシステムのみをサポートします。



共有ドライバーフォルダーからスキャナードライバーを引き出して個別に配置することにしました。必要なファイルはドライバーinfファイルから簡単に読み取れます。 ツリーは次のようになりました。



C:\ドライバー\スキャナー\ ip \ 3055scan \ hpgtpusd.dll

C:\ドライバー\スキャナー\ ip \ 3055scan \ hppasc01.cat

C:\ドライバー\スキャナー\ ip \ 3055scan \ hppasc01.dll

C:\ドライバー\スキャナー\ ip \ 3055scan \ hppasc01.inf

C:\ドライバー\スキャナー\ ip \ 3055scan \ hppniscan01.exe

C:\ドライバー\スキャナー\ ip \ 3055scan \ hpptpml3.dll

C:\ドライバー\スキャナー\ ip \ 3055scan \ hpxp3390.dll

C:\ドライバー\スキャナー\ ip \ 3055scan \ドライバー\ dot4

C:\ドライバー\スキャナー\ ip \ 3055scan \ドライバー\ dot4 \ Win2000 \ hpzidr12.dll

C:\ Drivers \ Scanners \ ip \ 3055scan \ Drivers \ dot4 \ Win2000 \ hpzipm12.dll

C:\ドライバー\スキャナー\ ip \ 3055scan \ドライバー\ dot4 \ Win2000 \ hpzipr12.dll

C:\ドライバー\スキャナー\ ip \ 3055scan \ドライバー\ dot4 \ Win2000 \ hpzipr12.sys




スキャナーのインストール機能は、外部コンポーネントに依存するものの、非常にシンプルになりました。

いくつかのハードコーディングされた簡略化を伴うスクリプトの最終形式は、次の形式を取ります。



 function Add-PrinterPort ($printerSource) { &cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prnport.vbs ` -a -r $printerSource -h $printerSource -o RAW -n 9100 | Out-Null } function Add-PrinterDriver ($printerName, $driverPath) { $folder = Split-Path $driverPath &cscript C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prndrvr.vbs ` -a -m $printerName -e Get-Platform -h $folder -i $driverPath } function Get-Platform { if ([System.Environment]::Is64BitOperatingSystem) { "Windows x64" } else { "Windows NT x86" } } function Add-Scanner ($ipaddress, $printername) { switch -regex ($printername) { #      "1530" { Push-Location 'C:\Drivers\Scanners\ip\1536scan\' if ($(Get-Platform) -eq "Windows x64") { .\hppniscan64.exe -f "hppasc16.inf" -m "vid_03f0&pid_012a&IP_SCAN" -a $ipaddress -n 1 } else { .\hppniscan01.exe -f "hppasc16.inf" -m "vid_03f0&pid_012a&IP_SCAN" -a $ipaddress -n 1 } Pop-Location } "(305\d)|(3390)" { Push-Location 'C:\Drivers\Scanners\ip\3055scan\' switch -regex ($printername) { "3050" { .\hppniscan01.exe -f "hppasc01.inf" -m "vid_03f0&pid_3217&IP_SCAN" -a $ipaddress -n 1 } "3052" { .\hppniscan01.exe -f "hppasc01.inf" -m "vid_03f0&pid_3317&IP_SCAN" -a $ipaddress -n 1 } "3055" { .\hppniscan01.exe -f "hppasc01.inf" -m "vid_03f0&pid_3417&IP_SCAN" -a $ipaddress -n 1 } "3390" { .\hppniscan01.exe -f "hppasc01.inf" -m "vid_03f0&pid_3517&IP_SCAN" -a $ipaddress -n 1 } } Pop-Location } } } Add-Type -As Microsoft.VisualBasic $printerSource = [Microsoft.VisualBasic.Interaction]::InputBox(" IP  .") if ($printersource -match "^192\.168\.0\.[0-9]{1,3}$") { $printername = "HP LaserJet M1530 MFP Series PCL 6" $driverpath = "C:\drivers\1536\hpc1530c.inf" Add-PrinterPort $printersource Add-PrinterDriver $printername $driverPath #  &         &rundll32 printui.dll,PrintUIEntry /if /b $printername /r $printersource /m $printername /u /K /q /Gw Start-Sleep -Seconds 10 Add-Scanner $printersource $printername }
      
      







私と一緒に来たすべてのHP MFPに同じ方法が適しています。そのために、スイッチとスキャナーのインストール機能を選択するためのドライバーとオプションを備えた個別のフォルダーを作成しました。



ドライバファイルのリストは、[SourceDisksFiles]、[RegisterDlls]、[WIA_CopyFiles]という名前のinfファイルのセクションにあり、ファイルにあります。 明確にするために、ドライバー3055および1536のスクリーンショット:







このメモで説明されているコードスニペットから、MFPの自動インストール用の本格的なスクリプトをコンパイルできます。少しのGUIとSNMPを追加すると、MFPを新しいマシンに永久にインストールするというトピックを完全に閉じることができます。



今日は以上です。ご清聴ありがとうございました。 コメントで、devconを使用した最初のインストールで3055 MFPが動作するために何が欠けているかを教えてくれたら、とても感謝しています。 誰かが私と同じ仕事をしたかもしれませんが、大成功を収めました。



次のパートでは、誰かがサンドボックス招待を投げた場合 、XeroxおよびKyocera MFPを操作するためのスクリプトを拡張する方法を示します。



All Articles