Skip navigation.

digital-nation

Blog-note d'un informaticien procrastinate...

Posts tagged with "batch"

Installation silencieuse d’une application

, , , ...

Il arrive parfois qu’on doivent installer des logiciels sans interactions humaines… Cette méthode d’installation s’appelle « silent » ou « stealth ».

Pour ce faire, nous utilisons un fichier MSI… Nous savons que le MSI utilise le MSIExec… Logiciel de Microsoft pour installer ces dits logiciels est appelé « Microsoft Installer » (plus sympa aussi). Nous savons aussi ses paramètres et sa syntaxe :



msiexec /Option <Required Parameter> [Optional Parameter]

Install Options
</package | /i> <Product.msi>
Installs or configures a product
/a <Product.msi>
Administrative install - Installs a product on the network
/j<u|m> <Product.msi> [/t <Transform List>] [/g <Language ID>]
Advertises a product - m to all users, u to current user
</uninstall | /x> <Product.msi | ProductCode>
Uninstalls the product
Display Options
/quiet
Quiet mode, no user interaction
/passive
Unattended mode - progress bar only
/q[n|b|r|f]
Sets user interface level
n - No UI
b - Basic UI
r - Reduced UI
f - Full UI (default)
/help
Help information
Restart Options
/norestart
Do not restart after the installation is complete
/promptrestart
Prompts the user for restart if necessary
/forcerestart
Always restart the computer after installation
Logging Options
/l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>
i - Status messages
w - Nonfatal warnings
e - All error messages
a - Start up of actions
r - Action-specific records
u - User requests
c - Initial UI parameters
m - Out-of-memory or fatal exit information
o - Out-of-disk-space messages
p - Terminal properties
v - Verbose output
x - Extra debugging information
+ - Append to existing log file
! - Flush each line to the log
* - Log all information, except for v and x options
/log <LogFile>
Equivalent of /l* <LogFile>
Update Options
/update <Update1.msp>[;Update2.msp]
Applies update(s)
/uninstall <PatchCodeGuid>[;Update2.msp] /package <Product.msi | ProductCode>
Remove update(s) for a product
Repair Options
/f[p|e|c|m|s|o|d|a|u|v] <Product.msi | ProductCode>
Repairs a product
p - only if file is missing
o - if file is missing or an older version is installed (default)
e - if file is missing or an equal or older version is installed
d - if file is missing or a different version is installed
c - if file is missing or checksum does not match the calculated value
a - forces all files to be reinstalled
u - all required user-specific registry entries (default)
m - all required computer-specific registry entries (default)
s - all existing shortcuts (default)
v - runs from source and recaches local package
Setting Public Properties
[PROPERTY=PropertyValue]


En règle générale nous avons donc la ligne de commande suivante
MSIEXEC.EXE /i INSTALL.MSI /qn

Cependant, et bien souvent, les utilisateurs ne sont pas adminstrateur de leurs postes. Et les applications se font de plus en plus lourde pour les distribuer à travers le réseau via des GPO.
Par là même il faut donc utiliser des droits d’un profil administrateur… Cela peut se faire de deux manières :
passage de paramètres à un fichier BATCH, les arguments sont stockés par exemple dans un exécutable (non visible à l’utilisateur donc) et transmis par %1 et %2 dans le BATCH
utilisation de la commande RUNASWAIT d’AutoIT avec un chargement de profil :
RunAsWait($s_utilisateur, $s_reseau, $s_motdepasse, 4, "MSIEXEC.EXE /i INSTALL.MSI /qn", @ScriptDir, @SW_Hide)

L’installation continuera dès la fin de la commande. Il est tout aussi utile alors d’utiliser la commande ProgressSet afin de faire patienter l’utilisateur (il est toujours recommandé de ne pas faire d’autres actions lors d’une installation).

Dans la continuité, il faut changer les droits du dossier… Simplement avec script en MS-DOS.

Simple et efficace. Mais surtout convivial pour l’utilisateur : il ne se préoccupe pas de l’installation, tout se fait « automatiquement » avec le SI derrière :smile:

MS-DOS : détecter un environnement virtuel

, , , ...

Alors qu’il y a quelques temps je vous faisais part d’un article permettant d’installer des imprimantes facilement, j’utilisais la variable d’environnement %clientname%. Quel ne fut pas mon étonnement de recevoir une « plainte » par e-mail m’informant que mon script ne fonctionnait pas.

Mais à cela je rajouterais que c’est tout à fait normal. Et pour cause la variable d’environnement est uniquement utilisable par un environnement virtuel… Hum. Mais alors comment faire ? Simplement je dirais en remplaçant cela par %computername% !
Simple mais fallait-il encore y penser.

Mais par la suite, toujours dans l’éventualité de pouvoir détecter un environnement virtuel comment faire ?
Très simple. Retenons ceci : %computername% renverra le nom du serveur de connexion. %clientname% renverra le nom du client qui est connecté.

De fait une simple structure conditionnelle du type suivant devrait pouvoir poser quelques soucis en moins à certaines personnes :
IF %COMPUTERNAME% EQU NOMSERVER (GOTO TC) ELSE (GOTO PC)
REM NOMSERVER = le nom du serveur d environnement virtuel

Dans l’’étiquette TC pourquoi ne pas faire une autre structure conditionnelle ? Tout test possible.
Identiquement pour l’étiquette PC.

Cependant il n’est pas rare d’avoir qu’un seul serveur permettant d’avoir un environnement virtuel. Mais lorsqu’on vois cela il n’est pas rare non plus d’avoir une harmonisation dans le nom.
SERVER1
SERVER2
SERVER3
Ou 
SRVIR69
SRVV89
SRVI76

Alors servons-nous un peu de notre intelligence :
SET VIRTUEL=%COMPUTERNAME:~0,5%
REM pour le premier exemple
SET VIRTUEL2=%COMPUTERNAME:~0,3%
REM pour le second exemple

Mais qu’est-ce que je fais ?
Simplement une limitation du nombre de caractère (nom court en MS-DOS) attribué dans une variable ou une autre…

Donc si ma variable est détectée dans ma structure conditionnelle alors je suis certain qu’il s’agit d’un environnement virtuel (ou du serveur lui-même !).

Voila qui j’espère répondra à la question de mon « plaintif ».

MS-DOS : créer une pause d’exécution

, , , ...

Non le BATCH n’est pas mort !

Alors que l’on parle de plus en plus de script de génération avancée, j’ai du pour des raisons professionnelles descendre vers la programmation en langage MS-DOS (oui bon ; pas de commentaire là-dessus !). Mais grand bien m’en a fit.
J’ai pu revoir quelques principes et faire quelques découvertes assez sympathique.

Une de celles-ci fut notament l’art et la manière de faire une pause d’exécution dans un fichier de commande (BATCH, extension .bat).
D’autres avait bien entendu déjà pensé à faire cela. Je pense spécifiquement au WAIT.BAT ou encore des SLEEP.BAT…

Mais je me suis dit pourquoi ne pas faire encore plus simple, mais j’avoue que la technique n’est pas des plus propres (mais si vous regardez aussi les fichiers cités plus haut, c’est tout aussi sale que mon exemple). Faire un PING vers un hôte inexistant avec une attente de réponse élevée.

En code cela donne ceci :
PING MONHOTEINCONNU -N 1 -W 10000
REM –N indique le nombre de requête envoyées, ici 1
REM –W indique le temps d’attente (timeout), ici 10 secondes

Cela donnera un temps mort au script… Peut-être juste le temps d’afficher (via ECHO) un logo ? Une information ? Une action ?
Rappelons-nous que nous pouvons très bien le faire :
REM echo. pour afficher une ligne vide
ECHO.
ECHO.
REM caractere speciaux pour faire du dessin
ECHO °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
ECHO ° WELCOME ON THE NETWORK °
ECHO °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
ECHO -----------------------------------------------
ECHO Please wait
ECHO -----------------------------------------------
ECHO.
PING MONHOTEINCONNU –N 1 –W 10000

Mais ce que j’apprécie surtout c’est d’avoir pu insérer de l’ASCII ART dans le script… Pour un logo par exemple :
ECHO.
ECHO.
ECHO   #####                                                  
ECHO  #     # #####   ####  #    # #    # #####  #    # #   # 
ECHO  #       #    # #    # #    # ##  ## #    # #    #  # #  
ECHO  #  #### #    # #    # #    # # ## # #    # ######   #   
ECHO  #     # #####  #    # #    # #    # #####  #    #   #   
ECHO  #     # #   #  #    # #    # #    # #      #    #   #   
ECHO   #####  #    #  ####   ####  #    # #      #    #   #  
ECHO.
ECHO.
PING MONHOTEINCONNU –N 1 –W 10000
[code]
Je trouve plutôt cela sympa… Autant attendre avec quelque chose qui peut être joli.
Et si nous voulons peaufiner nous pouvons aussi utiliser COLOR et @TITLE.
Respectivement ils définiront une couleur de fond et de police ainsi que le titre de la fenêtre MS-DOS.
[code]
COLOR FA
@TITLE LOGON SCRIPT
ECHO.
ECHO Ici mon texte ou mon logo
ECHO.
PING MONHOTEINCONNU –N 1 –W 10000

Et bien entendu nous précederons toutes nos lignes par un @ECHO OFF et un @CLS. A chaque informations que nous affichons nous pourrons donc l’éffacer…
Plutôt simple et efficace. J’aime.
December 2009
M T W T F S S
November 2009January 2010
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31