Questions et R�ponses Batch, Scripts, ligne de commande |
[bribes/qr_script_sommaire.htm]Par convention :
Script langage de commande (cmd.exe)
Script VBS
Script PowerShell
Q00 : langages de scriptsmise � jours le 18/02/2009 |
PowerShell 1.0 : Module d'installation Windows PowerShell 1.0 pour Windows Vista (KB928439) [MS KB928439 ]
La version CTP3 (Community Technology Preview - avant les b�tas) de PowerShell 2.0 est disponible (attention les CTP sont des versions de validation des fonctionnalit�s. Elles sont "impropres" � l'utilisation en production. Mais c'est souvent int�ressant de se faire la main avec.
La CTP3 de PowerShell 2.0 peut �tre t�l�charg�e via connect ou sur le site de [Microsoft ]
Pour d'autres Informations sur PowerShell voir la page Technologies Microsoft.
Q01 : Quel �diteurs pour mes scriptsmise � jours le 02/11/2007 |
Pour cr�er un script, il n'est pas n�cessaire d'avoir un outil bien compliqu�, la ligne de commande peut suffire :
Copy con monscript.cmd
Echo Voila mon Script
CTRL+Z
Et voila un petit script cr�� pour l'occasion. Pour l'�diter facilement s'il n'est pas trop important, "Edit" existe toujours m�me sur les plus r�cents syst�mes.
Voila pour les situations d'Urgence, quand on ne veux pas installer d'outils pour se faciliter la vie.
Apr�s dans les situation courantes, on a int�r�t � avoir un outil plus performant qui permet une �dition efficace des scripts. C'est principalement un affaire de go�t mais si vous cherchez quelques outils en voici quelques uns pour commencer :
Q2 : G�n�rer un fichier dat�mise � jours le 02/11/200 |
J'ai l'habitude de faire en sorte que mes scripts g�n�rent le plus souvent possible une trace de ce qui a �t� fait.
Comme la trace du dernier �v�nement n'est pas toujours suffisamment parlante ou suffisante, j'ai pris l'habitude de g�n�rer des fichiers de trace dat�s style :
C'est la trace d'un mailling qui a �t� envoy� le 21 mail 2007 (2007 05 21).
Comment obtenir l'information qui permet de dater le fichier dans un script BATCH, voila ma recette (m�me si vous en trouverez bien d'autres sur le net).
Voici la premi�re version :
Rem Calcul de la chaine DATE AAAAMMJJ
set D=%DATE:/=%
set D=%D:~4,4%%D:~2,2%%D:~0,2%
Echo %D%
Tr�s satisfaisante sur mon XP ou sur mes serveurs 2003, elle s'est r�v�l�e inadapt�e sur les "vieux" serveurs 2000 parce que la commande date ne renvoie pas la date de la m�me fa�on ("lun 19/09/2006"). Donc voici la "formule" qui marche sur les XP/2003/2000 :
Rem Calcul de la chaine DATE AAAAMMJJ
set WD=%DATE:/=%
if "%WD:~4,1%"=="2" (
set D=%WD:~4,4%%WD:~2,2%%WD:~0,2%
) ELSE set D=%WD:~9,4%%WD:~7,2%%WD:~5,2%
Echo %D%
Q3 : Sauvegarder l'�tat du syst�memise � jours le 02/11/2007 |
M�me avec l'apparition des points de restauration sous XP, j'ai pris l'habitude de faire une sauvegarde de l'�tat du syst�me d'une station ou d'un serveur avant de faire une op�ration de mise � jours ou d'installation de logiciels.
C'est un op�ration facile � faire � partir de NTBACKP :Lancer NTBACKUP (�viter l'assistant), passer dans l'onglet [Sauvegarder], Cocher System State, et choisir la destination et voila :
L'autre solution qui permet aussi de planifier l'action ou de la lancer automatique sans se poser de question sur le nom du fichier, sa localisation consiste � �crire un petit script pour faire cette action.
Le script � t�l�charger effectue en plus du backup l'envoie d'un mail, la notification � un serveur syslog [Mettre en place un serveur SYslog Fiche-14] et la sauvegarde sur un serveur de centralisation.
@Title Sauvegarde de l'Etat du Syst�me
@rem +----------------------------------------------------------+
@rem + Sauvegarde de l'Etat du syst�me +
@rem + Francois Dunoyer +
@rem + cree : 06/12/2005 +
@rem + Modif : 02/11/2007 +
@rem +----------------------------------------------------------+
:: valeurs par defaut si non configur�es
if "%SMTPS%"=="" Set SMTPS=smtp.Mondomaine.local
Set Ext=bkf
:: Par d�faut d�finition du PC de centralisation des Sauvegardes
Set Cible=\\Poste_104
set Dossier=d$\sauvegardes\ES
:: Dans le calcul de la date, on d�tecte si le syst�me est un Windows 2000 qui ne g�re pas l'option clich� instantan�e
:: Et on position une variable qui ajoutera cette option dans le cas des Windows 2003 ou plusRem Calcul de la chaine DATE AAAAMMJJ
set WD=%DATE:/=%
if "%WD:~4,1%"=="2" (
set D=%WD:~4,4%%WD:~2,2%%WD:~0,2%
set SNAPON=/snap:on
) ELSE set D=%WD:~9,4%%WD:~7,2%%WD:~5,2%
Set Message=%Action%
now %Message% >%LogBrief%:: Voila le coeur du script, la backup de l'�tat du systeme
Set BackupName=%Cible%\%dossier%\%ComputerName%-ES-%D%.%Ext%
echo %Backupname%
pause
ntbackup.exe backup systemstate /n "Etat du systeme pour %ComputerName% au %DATE%" /d "ES-%ComputerName%-%D%" /F "%BackupName%" /v:no /r:no /rs:no /hc:off /m normal /j "ES-%ComputerName%-%D%" /l:f %SNAPON%
:: La c'est fini
Script complet � t�l�charger :
Q04 : Utiliser une "liste" en batchmise � jours le 22/01/2008 |
Comme utiliser un semblant de liste pour r�p�ter un traitement dans une fichier de commande.
@Title Parcour d'une liste
@rem +----------------------------------------------------------+
@rem + Utilisation d'une liste
@rem + Francois Dunoyer
@rem + cree : 22/01/2008
@rem + Modif : 22/01/2008
@rem +----------------------------------------------------------+:: Cr�ation d'une variable
set filelist=Valeur1 Valeur2 Valeur3 Valeur4 Valeur5
set filelist=%filelist% valeur06 valeur07 Valeur08 Valeur09 valeur10
set filelist=%filelist% valeur16 valeur17 Valeur18 Valeur19 valeur20
:: Exploitation de la variable
for %%i in (%filelist%) do (
echo traitement %%i ...
traitement %%i
)
:: La c'est finiecho.
Echo Voila c'est fini .....
Q05 : Utiliser un fichier du m�me dossier que le scriptmise � jours le 15/10/2008 |
Quand je lance manuelle un script en me positionnant dans son dossier, je n'ai pas de mal � ouvrir un fichier dans le m�me dossier, mais ce n'est pas toujours le cas si je clique sur un raccourci qu'il soit local ou r�seau. Une petite astuce pour pouvoir acc�der aux fichier de param�tre sans connaitre � l'avance le dossier dans lequel le fichier de script est stock�. j'utilise le param�tre %~dp0 qui me renvoie le dossier (d) et le chemin (d) du script en cours.
REM : j'utilise ce script pour marquer mes photos.
REM : le script et le fichier (Setcopyw.ex2) sont dans la racine du dossier, les photos dans un sous-dossier VO
REM : EXIV2 est un tr�s bon outil pour marquer les fichiers image
REM : je n'ai qu'� cliquer sur le script pour taguer mon dossier sans me pr�occuper du r�pertoire en cour
Exiv2 -k -m "%~dp0Setcopyw.ex2" "%~dp0vo\*.jpg"
Q06 : G�rer les services en PowerShellmise � jours le 18/02/2009 |
Pour g�rer les services via le Powershell les commandes sont les suivantes ( pour s'en rappeler ? get-command *service) :
Get-Service
New-Service
Restart-Service
Resume-Service
Set-Service
Stop-Service
Suspend-Service
Start-Service
La syntaxe des commandes Restart-, Stop-, Start-,Suspend-service est similaire. Par exemple :
Pour d�marrer un service :
Start-Service -displayname "planificateur de t�ches" # en utilisant le nom long
Start-Service schedule # en utilisant le nom court
Pour connaitre l'�tat d'un service :
get-wmiobject win32_service | where {$_.Name -eq "schedule"}
Pour connaitre le nom court d'un service particulier :
get-service -displayname "planificateur de t�ches"
D�finir le type de d�marrage pour un service
set-service schedule -startuptype automatic
set-service schedule -startuptype disabled
set-service schedule -startuptype manual
Q07 : G�rer les process en PowerShellmise � jours le 18/02/2009 |
Pour g�rer les process via le powershell les commandes sont les suivantes ( pour s'en rappeler ? get-command *process):
Get-process
Stop-process
Pour surveiller la pr�sence d'un process :
get-process powershell
Pour stopper une instance d'une application
stop-process -name word
Pour stopper une instance d'une application parmi n instances
PS C:\> get-process excel
Handles | NPM(K) | PM(K) | WS(K) | VM(M) | CPU(s) | Id | ProcessName |
------- | ------ | ----- | ----- | ----- | ------ | -- | --------- |
506 | 18 | 18080 | 36212 | 174 | 9.48 | 2384 | EXCEL |
459 | 14 | 14148 | 23288 | 158 | 1.25 | 5776 | EXCEL |
stop-process 5776
et pour les scripteurs fous qui lancent trop de shell powershell, voici comment arr�ter toutes les instances de PowerShell sauf celle o� la commande est lanc�e [Issu du blog de l'�quipe PowerShell : blogs.msdn.com/powershell ]
Get-Process Powershell | Where-Object { $_.ID -ne $pid } | Stop-Process
Q08 : G�rer les services en ligne de commandemise � jours le 17/02/2009 |
Fonctionnement de la commande SC (commande int�gr�e 2000/2003/XP...) : Cette commande permet d'interagir avec les services de l'ordinateur local ou m�me d'un ordinateur distant (sous r�serve d'avoir les droits n�cessaires et attention aux pare-feux).
Voici quelques exemples d'utilisation de la commande :
Pour certaines actions il est n�cessaire de conna�tre le � nom court � d�un service, ce � nom court � n�est h�las pas celui qui est affich� dans la console de gestion des services. Pour l�identifier, il suffit de lancer la commande :
SC GETKEYNAME � Nom Long du service �
Par exemple, pour identifier le nom court du service � Workstation Manager � :
SC Getkeyname "Workstation Manger"
[SC] GetServiceKeyName SUCCESS Name = ZFDWM
Identifier le nom court du service sur lequel vous voulez intervenir (cf plus haut).
La commande qui va �tre utilis�e pour changer le compte est aussi la commande SC. Pour associer un compte � un service, il suffit de lancer la commande :
SC CONFIG NomCourtDuService obj= Compte password= MotDePasse
Attention : Il y'a un espace obligatoire entre " obj= " et le compte et entre " Password= " et le mot de passe.
Selon le compte utilis� la syntaxe sera l�g�rement diff�rente.
SC config messenger obj= .\toto password= titi
SC config messenger obj= DOMAINEAD\toto password=titi
SC config messenger obj= LocalSystem password= ""
SC config messenger obj= "NT Authority\LocalService" password= ""
SC config messenger obj= "NT Authority\NetworkService" password= ""
Q09 : Utiliser le PowerShell dans un script .cmdmise � jours le 18/02/2009 |
Il peut �tre int�ressant d'utiliser les possibilit�s du PowerShell pour enrichir ou am�liorer un batch existant (en attendant de le re �crire en PowerShell par exemple :) ). Pour cela, il suffit d'appeler l'interpr�teur PowerShell dans le script et de lui passer en param�tre la commande � ex�cuter :
PowerShell -command get-command
Si la commande est un peu plus compliqu�e... avec un pipe ("|") par exemple la syntaxe se complique un peu :
PowerShell -command "&{ get-command *service | format-table}"
Q10 : Ping en PowerShellmise � jours le 18/02/2009 |
Le ping est une bonne fa�on de savoir si un serveur ou un poste est toujours "vivant", c'est aussi une bonne fa�on de gagner du temps avant de lancer une commande sur un serveur distant.
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'"
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" | Select-Object -Property Address,ResponseTime,StatusCode
Plus de d�tails : http://winstructor.com/articles/windows-powershell/ping.htm
Q11 : Lire ou �crire le registre en PowerShellmise � jours le 20/02/2009 |
Lecture de la version du syst�me en cours (en version litt�rale)
# Lecture de la cl� de registre
$value = (get-itemproperty "HKLM:\\SOFTWARE\Microsoft\Windows NT\CurrentVersion")
$Version=$Value.ProductName
$Version
Pour changer la valeur d'une cl� de registre
# Changement du dossier Source pour les installations
# Il s'agit de la valeur SourcePath
Set-ItemProperty -path HKLM:\\SOFTWARE\Microsoft\Windows NT\CurrentVersion -name SourcePath -value "D:\i386"
Pour acc�der au registre distant, voir : http://thepowershellguy.com/blogs/posh/archive/2007/06/20/remote-registry-access-and-creating-new-registry-values-with-powershell.aspx
Q99 : Fini ? |
Pour le moment.
Copyright ©1997-2010, François Dunoyer, Dernière modification le