Script d'installation pour imprimante HP PageWide Pro 477dw

Résolu
EndOfDreams32 Messages postés 4 Statut Membre -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -

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é.

3 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     

    Bonjour,

    Le script est en quel langage ?



    0
  2. EndOfDreams32 Messages postés 4 Statut Membre
     

    Il est en batch (.bat)

    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       

      Alors je peux certainement t'aider.

      0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     

    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