Automatische Verbindung von Netzwerk-MFPs mit Scanfunktion [Teil 1]

HP LaserJet 1522, 1536, 3052/3055, 300/400 Color ...


Ich denke, viele Systemadministratoren kennen die im Header beschriebenen MFIs, sie unterscheiden sich vor allem in einer nicht sehr komfortablen Installation und sind dafür berüchtigt. Als ich einmal ein Fullsolution-Paket für einen MFP mit einem Gewicht von ungefähr 300 Megabyte über einen schmalen Kanal auf einen nächsten Computer kopierte, kam mir die Idee, dieses Installationsprogramm zu zerlegen und die Installation zu automatisieren - ich musste die Arbeit unterbrechen.



Ich habe den Fahrer bereits vor ungefähr anderthalb Jahren analysiert, während das Internet zu diesem Thema völlig leer war. Jetzt googelte ich schnell mit den mir bekannten Utilities-Schlüsselwörtern und fand ein paar verstreute Informationen. Trotzdem habe ich mich entschieden. dass die an einem Ort gesammelten Informationen immer noch nicht schaden, obwohl sie in diesem Beitrag vollständiger sind.

Richten Sie den Druck ein


Der HP LaserJet 1536 MFP war der erste, der nach snmp fragte, und entschied sich, damit zu beginnen. Zuerst musst du verstehen. wie man es als Drucker unter Windows 7 anschließt; Ich warf alte XP sofort weg, frisches Windows 8 in der Domäne, es gibt eine Meinung, die ich nie sehen werde. Das ist der Grund, sich mit der neuen PowerShell vertraut zu machen, dachte ich, was letztendlich fast die Hauptmotivation für das Parsen des Fahrers war. Das Anschließen eines IP-Druckers in Windows 7 besteht aus drei Schritten (in Windows 8 wird alles durch die integrierten Cmdlets erheblich vereinfacht, aber ich habe bereits gesagt, dass dies kein Schicksal ist). Zuerst erstellen wir einen IP-Anschluss, dann fügen wir einen Treiber hinzu und schließen tatsächlich einen Drucker an. Für all diese Phasen verfügt Windows über vorgefertigte VBS-Skripte. Viele, wie ich glaube, vertraute, haben in Windows 7 eine Möglichkeit dazu: C: \ Windows \ System32 \ Printing_Admin_Scripts \

Ich beginne mit der Erstellung eines Ports. Dieser Schritt ist der einfachste. Wir vergeben denselben Namen wie ip: Hinzufügen eines Treibers: Eine wichtige Funktion ist hier zu erwähnen: Der Druckername sollte genau so angegeben werden, wie er in der Treiber-Inf-Datei geschrieben ist. Entfernen Sie beispielsweise einen Teil des Namens, damit das Skript gedruckt wird Fehler: "Fehler beim Hinzufügen des Win32-Fehlercodes 87 für den HP LaserJet-Druckertreiber." Ein Auszug aus der Treiberdatei mit dem vollständigen Namen des Druckers: Jetzt muss der Drucker noch angeschlossen werden. Dafür habe ich mich für das wunderbare Printui-Programm entschieden. Ich rate Ihnen, es sich genau anzuschauen. Es hat interessante Tasten. Es ist an der Zeit, all dies in das folgende PowerShell-Skript zu integrieren:
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"










&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



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
}




Scannen


Beim Durchstöbern der Treiberinfodateien, um den richtigen Druckernamen zu finden und nebenbei sogar die HP Treiberstruktur zu verstehen, wurden die folgenden Zeilen hervorgehoben (fett hervorgehoben):

; Der Windows Vista
[HP.NT.6.0]
«die HP LJ die M1530 MFP die Serie der Scan» = WIA_1530_Inst.NT.6.0 die USB \ vid_03f0 & pid_012a & MI_00
«der HP LJ die M1530 MFP die Serie der Scan» = WIA_1530_NW.NT.6.0, vid_03f0 & pid_012a & IP_SCAN

, die Windows Vista 64
[HP .NTAMD64.6.0]
"HP LJ M1530 MFP-Scan" = WIA_1530_Inst_Vista64, USB \ vid_03f0 & pid_012a & mi_00
"HP LJ M1530 MFP-Scan" = WIA_1530_NW_Vista64, vid_03f0 & pid_012a


Hier möchte ich Texte (es scheint, was hat 1C damit zu tun? Wenn Sie wissen, was ich meine), aber ich gehe zu einer trockenen Aussage über: Lassen Sie uns versuchen, devcon.exe.

DevCon ist ein Befehlszeilenprogramm, das als Alternative zum Geräte-Manager zum Ein- und Ausschalten, Neustarten, Aktualisieren, Löschen und Abfragen einzelner Geräte oder Gerätegruppen verwendet werden kann. DevCon bietet auch die treiberspezifischen Informationen, die nicht über den Geräte-Manager verfügbar sind.

support.microsoft.com/kb/311272/en

Wir fügen das Gerät anhand der ID hinzu, die den Treiber angibt:

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

Fügen Sie der Registrierung die erforderlichen Parameter hinzu, starten Sie den Scan und ... Bingo!
Der Scanner funktioniert einwandfrei, es bleibt alles zu arrangieren.

: Die Scanner - Einstellungen werden in der Registrierung auf folgende Weise gespeichert
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ der Control \ Class \ {6BDD1FC6-810F-11D0-BEC7-08002BE2092F}
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ Root \ IMAGE

Empirisch bestimmen wir Schlüssel Registry müssen:





Für Um Registrierungseinstellungen bequem hinzuzufügen, erstellen Sie die unten angegebene Datei, die uns als Vorlage für Änderungen im Skript dient.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\_ITEM_\DeviceData]
«NetworkDeviceID»="\\hostname:_NETWORK_NAME_.domain.local\\ipaddr:_IP_ADDRESS_\\guid:\\macaddr:_MAC_ADDRESS_\\port:1"
«PortID»="_IP_ADDRESS_"
«NetworkHostName»="_NETWORK_NAME_.domain.local"
«TulipIOType»=dword:00000005

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\IMAGE\_ITEM_\Device Parameters]
«NetworkDeviceID»="\\hostname:_NETWORK_NAME_.domain.local\\ipaddr:_IP_ADDRESS_\\guid:\\macaddr:_MAC_ADDRESS_\\port:1"
«PortID»="_IP_ADDRESS_"
«NetworkHostName»="_NETWORK_NAME_.domain.local"
«MAC»="_MAC_ADDRESS_"
«PortNumber»=«1»
"Index" = "_ ITEM_"


Das fertige Skript zur Installation des Scanners hat folgende Form:

$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


Wir reiben uns die Hände, prüfen - es funktioniert, wir modifizieren es unter 1522 - es funktioniert, wir triumphieren direkt unter 3055 - ein Mist ... Mit dem
Scanner können Sie kein Tablet auswählen, nur der Einzug ist im Scan-Menü verfügbar, und selbst er lehnt das Scannen ab.



Ernstes Gespräch mit 3055 oder, Alter, du hast den falschen Stein auf den Berg gehoben





Hier ist er, LaserJet 3055/3052 - der schädlichste Typ, den ich überraschenderweise am häufigsten sehe. Tatsächlich - ich werde Ihnen ein Geheimnis verraten - habe ich mich zuerst damit befasst - bin beim Installieren des Treibers durch den Dschungel der Filterung der Procmon-Ausgabe gegangen, um irgendwo in der Mitte etwas Interessantes zu finden und zu ertrinken. Als Procmon wegen Gedächtnismangels wieder fiel, entschloss ich mich, dieses Unternehmen in einen freundlicheren und ruhigeren Zustand zu versetzen.

Die zweite Razzia zum Parsen des MFP-Installationsprogramms ergab das Ergebnis: Nach anderthalb Stunden Parsen der Protokolle in den Eingeweiden der Installationsausgabe wurde eine Perle gefunden - hppniscan01.exe
Ausgehend von den erforderlichen Parametern wurde der Scanner sofort im Gerät installiert und die erforderlichen Registrierungszweige registriert:
hppniscan01.exe -f "hppasc16.inf" -m "vid_03f0&pid_012a&IP_SCAN" -a "192.168.0.30" -n 1




Die Treiberdistributionen anderer HP Drucker haben eine 64-Bit-Version, während der 3055-Treiber nur x86-Betriebssysteme unterstützt.

Ich habe beschlossen, die Scannertreiber aus dem freigegebenen Treiberordner zu ziehen und separat abzulegen. Die erforderlichen Dateien können einfach aus der Treiber-Infodatei gelesen werden. Der Baum stellte sich wie folgt heraus:

C: \ Treiber \ Scanner \ ip \ 3055scan \ hpgtpusd.dll
C: \ Treiber \ Scanner \ ip \ 3055scan \ hppasc01.cat
C: \ Treiber \ Scanner \ ip \ 3055scan \ hppasc01.dll
C: \ Treiber \ Scanner \ ip \ 3055scan \ hppasc01.inf
C: \ Treiber \ Scanner \ ip \ 3055scan \ hppniscan01.exe
C: \ Treiber \ Scanner \ ip \ 3055scan \ hpptpml3.dll
C: \ Treiber \ Scanner \ ip \ 3055scan \ hpxp3390.dll
C: \ Treiber \ Scanner \ ip \ 3055scan \ Treiber \ dot4
C: \ Treiber \ Scanner \ ip \ 3055scan \ Treiber \ dot4 \ Win2000 \ hpzidr12.dll
C: \ Treiber \ Scanner \ ip \ 3055scan \ Treiber \ dot4 \ Win2000 \ hpzipm12 .dll
C: \ Treiber \ Scanner \ ip \ 3055scan \ Treiber \ dot4 \ Win2000 \ hpzipr12.dll.
C: \ Treiber \ Scanner \ ip \ 3055scan \ Treiber \ dot4 \ Win2000 \ hpzipr12.sys


Die Scanner-Installationsfunktion ist jetzt recht einfach, allerdings in Abhängigkeit von der externen Komponente.
Die endgültige Form des Skripts mit einigen hartcodierten Vereinfachungen hat die folgende Form:

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
}


Die gleiche Methode eignet sich für alle HP MFP-Geräte, für die ich separate Ordner mit Treibern und Optionen für die Auswahl der Scannerinstallationsfunktion im Switch erstellt habe.

Die Liste der Treiberdateien finden Sie in den Abschnitten der Inf-Datei mit den Namen [SourceDisksFiles], [RegisterDlls], [WIA_CopyFiles] und anschließend in der Datei. Screenshot von Treiber 3055 und 1536 für Klarheit:



Da in diesem Artikel Code - Schnipsel beschrieben, können Sie eine vollständige Skript sammeln automatisch die MFP installieren, und wenn Sie hinzufügen , um es ein wenig Gui und snmp, können Sie auch für sich selbst dauerhaft schließen das Thema Installation MFP auf die neue Maschine.

Das ist alles für heute, danke für Ihre Aufmerksamkeit. Wenn Sie in den Kommentaren erfahren, was dem 3055 MFP bei der ersten Installation mit devcon fehlt, bin ich Ihnen sehr dankbar. Vielleicht hat jemand den gleichen Job wie ich gemacht, aber großen Erfolg erzielt. Wenn jemand eine Einladung in die Sandbox wirft , zeige ich

im nächsten Teil, wie Sie unser Skript für die Arbeit mit Xerox- und Kyocera-MFPs erweitern.

Jetzt auch beliebt: