Script d'installation pour imprimante HP PageWide Pro 477dw

Résolu/Fermé
EndOfDreams32 Messages postés 2 Date d'inscription vendredi 10 février 2023 Statut Membre Dernière intervention 12 février 2023 - Modifié le 18 févr. 2023 à 20:14
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 - 18 févr. 2023 à 21:48

Bonjour à tous, j'ai pris un script qui me permet d'ajouter des imprimantes sur des ordinateurs de mon entreprises sans avoir a le faire manuellement, je récupère les pilotes (fichiers .inf) mais il me dis qu'il ne trouve pas de pilotes adaptés et me dis également de vérifier le nom de imprimante, si quelqu'un pense qu'il peut m'aider, qu'il se manifeste et je lui envois les captures en privé.

A voir également:

3 réponses

barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
10 févr. 2023 à 16:16

Bonjour,

Le script est en quel langage ?



0
EndOfDreams32 Messages postés 2 Date d'inscription vendredi 10 février 2023 Statut Membre Dernière intervention 12 février 2023
10 févr. 2023 à 17:55

Il est en batch (.bat)

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
10 févr. 2023 à 18:01

Alors je peux certainement t'aider.

0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
Modifié le 18 févr. 2023 à 21:58

Voilà un script conçu par moi-même permettant d'installer/ajouter une imprimante réseau à partir du dossier contenant le pilote et son script d'installation (fichier .inf). Le script doit être placé à l'intérieur du dossier et il doit être exécuté via le clic-droit ("exécuter en tant qu'administrateur").

Concernant les fonctionnalités :

- si l'imprimante est déjà installée le script va tout simplement quitter

- le script est capable d'identifier le bon fichier .inf parmi plusieurs, en se basant sur le modèle d'imprimante, sur l'entête du fichier et sur l'architecture (32 ou 64 bits) du système d'exploitation

- si l'adresse ip de l'imprimante n'est pas connue ni renseignée au début du script alors le script va télécharger et décompresser le scanner Nmap (à condition que l'utilitaire 7za.exe soit installé), celui-ci va alors analyser le réseau à la recherche de l'imprimante et de son adresse ip, pour cela il faudra renseigner l'adresse MAC de l'imprimante au début du script

- l'imprimante sera désignée comme étant l'imprimante par défaut

Le script a été testé avec succès sur 3 imprimantes de marques différentes (HP, Brother et Epson), sur Windows 10 version 22H2

Ne pas oublier d'indiquer à minima le modèle d'imprimante, et éventuellement l'adresse MAC ou l'adresse ip

@echo off
ver | find "10.0." >nul && chcp 65001 >nul || chcp 28591 >nul
color 0A
setlocal EnableExtensions EnableDelayedExpansion
mode con: cols=90 lines=30

title Installation d'une imprimante réseau

: -------------------------------------------------------------------------------------------------------------------------
: on renseigne le modèle exact de l'imprimante et éventuellement son adresse MAC
: -------------------------------------------------------------------------------------------------------------------------

rem imprimante "HP PageWide Pro 477dw"
:: set "model=HP PageWide Pro 477dw"

rem imprimante "Brother MFC-L2710DW"
set "model=Brother MFC-L2710DW"
set "target=A4:FC:77:65:61:C7"

: -------------------------------------------------------------------------------------------------------------------------
: on renseigne l'adresse ip de l'imprimante (facultatif car Nmap est capable de la trouver via son adresse MAC)
: -------------------------------------------------------------------------------------------------------------------------

set "ipAddress=" 
:: set "ipAddress=192.168.0.150"

: -------------------------------------------------------------------------------------------------------------------------
: on définit certaines variables qui concernent le scanner réseau Nmap
: -------------------------------------------------------------------------------------------------------------------------

set "port=9100"
set "nmapVersion=nmap-7.92"

if not defined model (exit /b 1)

: -------------------------------------------------------------------------------------------------------------------------
: on vérifie si l'imprimante n'est pas déjà installée
: -------------------------------------------------------------------------------------------------------------------------

wmic printer get Name,DriverName /format:table | find /i "%model%" && exit /b 1

: -------------------------------------------------------------------------------------------------------------------------
: on recherche le script d'installation (fichier .inf) du pilote de l'imprimante
: -------------------------------------------------------------------------------------------------------------------------

if "A%~1A"=="AA" (set "driverDirectory=%~dp0") else (set "driverDirectory=%~1")
cd /d %driverDirectory% || exit /b 1
set "inf="

echo.
echo ######################################################
echo Etape 1 - Recherche du pilote d'impression
echo ######################################################

rem on détermine si le système est 32 ou 64 bits
wmic os get osarchitecture /value | find "64" >nul && set "arch=x64" || set "arch=x86"

rem on recherche dans les fichiers .inf correspondants à l'architecture
for %%A in (*%arch%*.inf) do find /i "Class" "%%~A" | find /i "Printer" >nul && if not defined inf (call :extraction "%%~A")
if defined inf (goto :network)

rem on recherche dans tous les fichiers .inf
for %%A in (*.inf) do find /i "Class" "%%~A" | find /i "Printer" >nul && if not defined inf (call :extraction "%%~A")
if not defined inf (
	echo.
	echo Aucun script d'installation n'a été trouvé pour l'imprimante '%model%'
	echo. & pause
	exit /b 1
)

: -------------------------------------------------------------------------------------------------------------------------
: on lance l'installation si l'adresse ip a été renseignée au début du script, sinon on fait appel à Nmap
: -------------------------------------------------------------------------------------------------------------------------

:network

timeout /t 3 >nul

if defined ipAddress (
	call :installation "!ipAddress!"
	timeout /t 5 /nobreak
	exit /b 0
)

: -------------------------------------------------------------------------------------------------------------------------
: on vérifie les prérequis pour le téléchargement et l'extraction du programme Nmap
: -------------------------------------------------------------------------------------------------------------------------

7za | find "Pavlov" >nul || exit /b 1
curl -V | find "libcurl" >nul || exit /b 1
if not defined target (exit /b 1)

: -------------------------------------------------------------------------------------------------------------------------
: on télécharge le scanner réseau NMAP
: -------------------------------------------------------------------------------------------------------------------------

set "PATH=%TMP%\%nmapVersion%;%PATH%"

pushd %TMP%

nmap -V >nul 2>&1 || (

	echo ######################################################
	echo Etape requise - Téléchargement de l'outil NMAP
	echo ######################################################
	echo.
	curl -# -k -o "%nmapVersion%-win32.zip" "https://nmap.org/dist/%nmapVersion%-win32.zip"
	cls & echo.
	echo ######################################################
	echo Etape requise - Décompression de l'outil NMAP
	echo ######################################################
	7za x "%nmapVersion%-win32.zip" -y

)

popd

: -------------------------------------------------------------------------------------------------------------------------
: on vérifie si NpCap est installé
: -------------------------------------------------------------------------------------------------------------------------

:verif

nmap -V 2>&1 | find "WARNING:" >nul && (
	echo. & echo ### Veuillez d'abord installer le programme NpCap
	echo. & pause
	start "" /D "%TMP%\%nmapVersion%" /WAIT "npcap-1.50.exe"
	goto :verif
)

: -------------------------------------------------------------------------------------------------------------------------
: on scanne le réseau avec l'outil NMAP
: -------------------------------------------------------------------------------------------------------------------------

for /f "tokens=2 delims=:(" %%A in ('netsh interface ip show address ^| find "/" ^| findstr /v "127.0."') do if not defined network (set "network=%%~A")
set "network=!network: =!"

set "macAddress="

cls & echo.
echo ######################################################
echo Etape 2 - Recherche de l'IP imprimante
echo ######################################################
echo.

set "log=%TMP%\report_nmap.txt"
nmap.exe -n -oN %log% --open -p T:%port% !network!

timeout /t 2 /nobreak

: -------------------------------------------------------------------------------------------------------------------------
: on analyse le fichier journal pour extraire l'ip de l'imprimante
: -------------------------------------------------------------------------------------------------------------------------

for /f "tokens=5" %%M in ('findstr /i /C:"Nmap scan report for" "%log%"') do set "ipAddress=%%M"
for /f "tokens=3-8 delims=:( " %%P in ('findstr /i /C:"MAC Address" "%log%"') do set "macAddress=%%P:%%Q:%%R:%%S:%%T:%%U"

if "!macAddress!"=="%target%" (call :installation "!ipAddress!") else (echo. & echo ^>^>^> L'imprimante ciblée est éteinte/inaccessible)

: -------------------------------------------------------------------------------------------------------------------------
: fin du script
: -------------------------------------------------------------------------------------------------------------------------

timeout /t 5 /nobreak
exit /b 0

: -------------------------------------------------------------------------------------------------------------------------
: on crée un port TCP/IP contenant l'ip de l'imprimante
: -------------------------------------------------------------------------------------------------------------------------

:installation

cls & echo.
echo ^>^>^>^>^> %model% = [ %~1 ] ^<^<^<^<^<
echo. & echo.
echo ######################################################
echo Etape 3 - Création du port d'impression TCP/IP
echo ######################################################
echo.

cscript "%WINDIR%\System32\Printing_Admin_Scripts\fr-FR\prnport.vbs" -a -r "IP_%~1" -h %~1 -o raw -n %port%

: -------------------------------------------------------------------------------------------------------------------------
: on ajoute/installe l'imprimante dans le système
: -------------------------------------------------------------------------------------------------------------------------

echo. & echo.
echo ######################################################
echo Etape 4 - Ajout de l'imprimante réseau
echo ######################################################
echo.

rundll32 printui.dll,PrintUIEntry /if /b "%model%" /f "!inf!" /r "IP_%~1" /h %arch% /m "!driverName!" /z
echo ^=^=^>^> ajout imprimante OK

rundll32 printui.dll,PrintUIEntry /y /n "%model%"
echo. & echo ^=^=^>^> imprimante par défaut OK

goto :eof

: -------------------------------------------------------------------------------------------------------------------------
: on récupère le nom du pilote contenu dans le .inf
: -------------------------------------------------------------------------------------------------------------------------

:extraction

set "driverName="
for /f "skip=2 tokens=1,2 delims=,=""" %%E in ('find "%model%" "%~1"') do (
	if not defined driverName (echo %%~E | findstr "Printer series Series" >nul && set "driverName=%%~E" || set "driverName=%%~F")
)

:supEspace
if defined driverName (
	if "!driverName:~-1!"==" " (
		set "driverName=!driverName:~0,-1!"
		goto :supEspace
	)
	set "driverName=!driverName:"=!"
	set "inf=%~1"
) else (exit /b 1)

: -------------------------------------------------------------------------------------------------------------------------
: on affiche les informations issues du fichier .inf
: -------------------------------------------------------------------------------------------------------------------------

for /f "tokens=2,3 delims=,=" %%A in ('find /i "DriverVer" "!inf!"') do set "version=%%B" & set "creation=%%A"

echo.
echo ^>^>^> Modèle        : '%model%'
echo ^>^>^> Fichier INF   : '!inf!'
echo ^>^>^> Nom du pilote : '!driverName!'
echo.
echo ^>^>^> Script d'installation : OK

if exist "!inf:inf=cat!" (echo ^>^>^> Catalogue de sécurité : OK) else (exit /b 1)

echo.
echo ^>^>^> Version du pilote     : !version: =!
echo ^>^>^> Date du pilote        : !creation: =!
echo.

goto :eof

rem


0