Skip navigation.

digital-nation

Blog-note d'un informaticien procrastinate...

November 2009

( Monthly archive )

Date et BATCH

, , , ...

Parfois je me dis que c’est mal fait. Alors on recommence. C’est un peu ce que j’ai fait avec un script permettant de faire un tracking de connexion mais en mode MS-DOS.

Créer le script ne fut pas difficile en soit… Une ligne et le tour est joué. Non. La particularité fut de travailler avec les dates.
La date est stockée dans la variable %DATE%. Selon que le système aie les paramètres régionaux Français (France), Français (Belgique), Néerlandais (Belgique) – qui sont les paramètres les plus utilisé en Belgique – le renvoi de la valeur lorsqu’on fait un ECHO de la variable DATE change !
  • Vr. 20/11/2009
  • Ven. 20/11/2009
  • 20/11/2009

Cela n’arrange pas les scripteurs bien entendu… Mais ne baissons pas les bras. Il y a 10 points communs entres tous. Travaillons là-dessus de la manière suivante :
Prenons les 10 derniers caractères :
 SET MYDATE=%DATE:~-10%

A partir de là nous pouvons isoler l’année facilement (nous pouvions le faire aussi préalablement mais cela manquait du charme de l’utilisation de la variable).
SET YEAR=%MYDATE:~-4%

Nous devons repasser par la suite dans une demarche classique:
SET MONTH=%MYDATE:~3,2%
SET DAY=%MYDATE:~0,2%

Il ne reste plus qu’à afficher le résultat !
REM AFFICHAGE VARIABLES
ECHO %YEAR%
ECHO %MONTH%
ECHO %DAY%
PAUSE


Pourquoi ne pas y avoir pensé avant ? Je ne l’ai pas trouvé en recherchant sur Bing et Yahoo (et Google).
Bah passons nous l’avons maintenant !

Un juste retour dans l’Histoire

, , , ...

Il est rare que je parle de politique. Non pas que cela ne m’intéresse pas, mais disons que chacun a son avis et peut dire ce qu’il veut tant le domaine est vaste et impénétrable tant qu’on n’est pas spécialisé dans ce dit terrain.
C’est encore plus inhabituel lorsque je le fais sur mon blog privé alors que je le destine plus comme un aide mémoire dédié à l’informatique générale ou spécialisée mais…

Souvenons-nous de la création du Benelux, que je considère comme un rapprochement à la formation de la CEE, menant par la suite encore à l’UE (oui je sais, je brode et je raccourcis beaucoup ! Même trop !) et l’actuelle Europe des 27.

Quoi de plus normal que de voir alors un homme politique d’un de ces pays à la première présidence de l’Europe ! Herman Van Rompuy, un homme politique sage et de l’ancienne « boutique », vas-t-il de ce pas prendre la tête de l’Europe ? Nous le serons dans quelques heures mais déjà les médias s’arrachent les suppositions les plus folles alors que les informations officielles sont très rares (bien qu’à l’heure actuelle nous avons la confirmation que la Suède soutienne la candidature de l’homme politique).

Soyons zen, nous aurons (en tant que belges) bientôt un homme à la tête de l’Europe, mais la Belgique perd un sage qui a maintenu jusqu’à présent le navire politique belge.

Affaire à suivre (mais pas sur ce blog).


Déblocage de comptes en masse

, , , ...

Il arrive que pour des raisons de sécurité, une multitude de compte soient bloqués (Account is locked out) dans l’Active Directory.
Il faut donc par la suite les débloquer et on ne dispose pas toujours d’une console etc. Et un script en VBS peut nous aider.

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'Début de la déclaration des variables
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select AdsPath from 'LDAP://OU=Mes-Users,DC=Mon-Reseau,DC=Mon-Reseau-Connexion " & "where objectClass='user'"
Set objRecordSet = objCommand.Execute
'Fin de la déclaration des variables
'Compteur
monCompteur = 0
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

'Sélection des comptes bloqués (boucle)
With objRecordSet
While Not .EOF
AdsPath = .Fields("AdsPath")
Set objItem = GetObject(AdsPath)
If objItem.IsAccountLocked = True Then ' True peut aussi avoir la valeur-1
' Routine pour débloquer les comptes'
objItem.isAccountLocked = 0 ' False
objItem.setInfo
'Fin de la routine pour débloquer les comptes
monCompteur = monCompteur + 1
Dim maVariable
If maVariable = "" Then
maVariable = objItem.sAMAccountName & " unlocked" & vbCRLF
else
maVariable = objItem.sAMAccountName & " unlocked" & vbCRLF & maVariable
End If
Else
'ADS_UF_LOCKOUT desactive
End If
.Movenext
Wend
End With

WScript.Echo Date() & vbTab & Time() & vbTab & "Nb. de compte désactivé:" & monCompteur & vbCRLF & _
"Liste des comptes désactivé: " & VbCRLF & maVariable

A lancer avec un compte administrateur et bien entendu il faut personnaliser le chemin LDAP… Cela peut se faire via Adsi Edit pour avoir le chemin complet !


Déploiement par décompression

, , , ...

Il arrive qu’en place et lieu de déployer par script, par GPO etc. il ne faille « que » décompresser une application dans un dossier (avec ou sans droits sur celui-ci…) et créer un raccourcis.

Simple comme bonjour, mais lorsqu’on utilise la gravure, oops, on se rend compte que l’idée est bonne mais que le nom de fichier d’un contenant est très (trop, beaucoup trop) long (j’entends par là, plus de 256 caractères !). Passons sur le fait que le nommage n’est pas « idéal », ou encore d’autres aspects.

Voyons maintenant comment déployer cela :
  • télécharger un logiciel gratuit (cela me change du libre) : Freebyte Zip ;
  • créer une nouvelle archive en exécutant la dite application, cette archive contiendra donc tous vos « documents », applications, etc. ;
  • créer ensuite un fichier BATCH contenant cette unique ligne :
    START /WAIT FBZIP.EXE -E -P REPERTOIRE_ZIP.ZIP C:\REPERTOIRE_DESTINATION

  • créer ensuite un Autorun.inf ;
  • gravez votre compilation et tester.

Vous devriez avoir au bout de quelques secondes (selon la rapidité de votre PC) un écran MS-DOS ainsi qu’une fenêtre Feebyte Zip. Après la décompression, vous avez alors les écrans qui disparaissent et votre « document », logiciel ou autre sont décompressés dans le répertoire adéquat.
Bien entendu, vous pouvez l’exécuter avec les droits administrateurs… Ce qui est largement recommandé !

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:
November 2009
M T W T F S S
October 2009December 2009
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