Question Script batch à convertir en powershell

Plus d'informations
il y a 9 ans 7 mois #22116 par Dam
Bonjour

J'ai un script de sauvegarde système et de dossiers qui utilise différent paramètres selon les sauvegardes qui sont nécessaires et qui est développé en Batch, je dois le convertir en PowerShell pour avoir plus de possibilité et si possible l’améliorer.

J’aimerais que vous me donniez des pistes pour voir comment je pourrai faire cela, utiliser des fonctions ? des Objets ? pour faire quelque chose de propre et d’efficace, ce qui me permettrai de voir les bonnes pratiques de Scripting sous PowerShell.

Voici le script d’origine en Batch (Pour l’explication du fonctionnement de base un autre fichier cmd appel ce script en lui passant : ALL ou SYS ou BDD ou FIC comme paramètre au démarrage, ce qui permet de spécifier le type de sauvegarde attendu)


[code:1]@ECHO OFF

REM 1. RECHERCHE DU TYPE DE SAUVEGARDE
IF \"%1\"==\"ALL\" GOTO CONFIG_ALL
IF \"%1\"==\"SYS\" GOTO CONFIG_SYS
IF \"%1\"==\"BDD\" GOTO CONFIG_BDD
IF \"%1\"==\"FIC\" GOTO CONFIG_FIC
GOTO ERREUR

REM 2. CONFIGURATION DE LA SAUVEGARDE
:CONFIG_SYS
SET SAVESYS=1
SET SAVEBDD=0
SET SAVEFIC=0
GOTO SAVE_START
:CONFIG_BDD
SET SAVESYS=0
SET SAVEBDD=1
SET SAVEFIC=0
GOTO SAVE_START
:CONFIG_FIC
SET SAVESYS=0
SET SAVEBDD=0
SET SAVEFIC=1
GOTO SAVE_START
:CONFIG_ALL
SET SAVESYS=1
SET SAVEBDD=1
SET SAVEFIC=1
GOTO SAVE_START


REM 3. DEMARRAGE DE LA SAUVEGARDE
:«»SAVE_START
ECHO
ECHO SAUVEGARDE JOURNALIERE
ECHO
ECHO Date Debut : %DATE%
ECHO Heure Debut : %TIME%
ECHO Nom du PC : %COMPUTERNAME%
ECHO Identification Disque Destination :
VOL D:
ECHO.

REM 4. DEMARRAGE DE LA SAUVEGARDE SYSTEME
:«»SAVE_SYS
IF %SAVESYS%==0 GOTO :«»SAVE_BDD
ECHO *** SAUVEGARDE SYSTEME ***
ECHO.
ECHO Debut de la sauvegarde : %TIME%
wbadmin start backup -include:C:\testsav -backuptarget:«»D: -allcritical -quiet > C:\Scripts\Rapports\SAVESYS.LOG
ECHO.
ECHO Fin de la sauvegarde : %TIME%


REM 5. DEMARRAGE DE LA SAUVEGARDE DE BASE DE DONNEES AVEC ARRET PREALABLE D'UN SERVICE
:«»SAVE_BDD
IF %SAVEBDD%==0 GOTO :«»SAVE_FIC
ECHO.
ECHO *** SAUVEGARDE AVEC ARRET D'UN SERVICE ***
ECHO.



REM 6. DEMARRAGE DE LA SAUVEGARDE DE DOSSIERS
:«»SAVE_FIC
IF %SAVEFIC%==0 GOTO :«»SAVE_FIN
ROBOCOPY C:\testsav d:\test\C\testsav /MIR /NFL /NDL /NP /R:0 /W:0 /MT:8 /LOG:C:\Scripts\Rapports\testsav.log



REM 7. FIN DE LA SAUVEGARDE
:«»SAVE_FIN
ECHO *** FIN DE LA SAUVEGARDE ***
ECHO Date Fin : %DATE%
ECHO Heure Fin : %TIME%
ECHO.
GOTO :FIN


REM 8. GESTION DES ERREURS
:ERREUR
ECHO.
ECHO ERREUR : Mode d'appel [%1] incorrect
ECHO.
ECHO Modes d'appels valides :
ECHO ALL : sauvegarde Complete
ECHO SYS : sauvegarde système uniquement
ECHO BDD : sauvegarde des bases de donné (dossier avec arrêt de service) uniquement
ECHO FIC : sauvegarde des dossiers uniquement
ECHO.


REM 9. FIN DU SCRIPT
:FIN

[/code:1]

Message édité par: mood8moody, à: 6/08/16 13:31<br><br>Message édité par: mood8moody, à: 6/08/16 13:35

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22117 par Laurent Dardenne
Salut,
mood8moody écrit:

J’aimerais que vous me donniez des pistes pour voir comment je pourrai faire cela, utiliser des fonctions ? des Objets ?

Utiliser des fonctions et des objets oui, voir des fonctions qui renvoient des objets :lol:
mood8moody écrit:

pour faire quelque chose de propre et d’efficace, ce qui me permettrai de voir les bonnes pratiques de Scripting sous PowerShell.

Ici ça dépend du temps que tu as pour cette migration 3 heures, 3 jours ou 3 semaines.

Tu peux adapter ton batch au langage Powershell ou le réécrire, dans ce cas des specs et un cahier des charges c'est un bon début (qq lignes suffisent).
Ainsi l'usage de Pester s'en trouvera facilité au cas où.

Est-ce seulement ce script qui est à migrer ou l'ensemble de la solution ?<br><br>Message édité par: Laurent Dardenne, à: 6/08/16 16:39

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22118 par Dam
j'ai quelques jours pour produire quelque chose de correct. Pour l'instant mon objectif est d'adapter ce script en powershell car le script en batch pose quelques limitations.

La finalité est de revoir la solution complète et de l’améliorer.

En gros un logiciel développé en interne sous Windev produit un script de sauvegarde personnalisable suivant nos besoins.

Ci-dessus j'ai donc copié une version d'un script que ce logiciel m'a produit pour faire des tests.

L'ossature du script est entrée en dur dans windev et seulement certains appels se font pour modifier certaines variable.

L'ossature ressemble beaucoup au script que j'ai mis plus haut avec quelques paramétrage qui ne sont pas intégrés, des variables surtout au niveau des lecteurs de destination etc... Par exemple la ligne : wbadmin start backup -include:C:\testsav -backuptarget:D: -allcritical -quiet &gt; C:\Scripts\Rapports\SAVESYS.LOG est reintegré par le logiciel selon le paramétrage.

Il faudra que j'arrive a interfacer windev avec le script powershell comme actuellement. Donc si certaines variables sont imbriquées au fin fond d'objet .net, j'aurais des problèmes.

Le but pour l'instant est de produire une ossature en powershell, qui me permet de faire déjà la même chose pour voir ce que cela donne.

Je pensais simplement réécrire le script en version powershell, mais j'aimerais profiter de cette solution pour faire quelque chose de clean.

Message édité par: mood8moody, à: 6/08/16 18:40<br><br>Message édité par: mood8moody, à: 6/08/16 21:47

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22119 par Laurent Dardenne
mood8moody écrit:

Il faudra que j'arrive a interfacer windev avec le script powershell

C'est le premier point à aborder, tu peux déjà réaliser ,si possible, un script de base pour vérifier l'appel du script et le passage de paramètre.

Quant tu parles de \&quot;L'ossature du script\&quot; tu référence un mécanisme de template ?

En suite j'ai une question, le script réalisé est figé et doit répondre à plusieurs cas c'est bien ça ?
Et comment sont gérer les erreurs de Robocopy et les possible exceptions PS/dotnet ?

Enfin quelles sont les limitations que tu souhaites dépasser ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22120 par Dam
Je ne suis sur le sujet que depuis hier,donc c'est encore frais. Powershell m'interesse beaucoup donc j'en profite pour prendre des connaissances.

On m'a demandé pour le moment de convertir le script en powershell et de ne pas m'occuper de l'interface avec windev mais il semble bien stocké en tant que template avant compilation par windev.

Le script une fois edité ne repond à mon avis qu'à un cas precis. Si on veut autre chose, on reparametre le logiciel et on réédite un script.

Je pense que l'objectif est plus de voir les possibilités de Powershell que de recuperer et garder la solution précédente de sauvegarde.

Donc tout est envisageable. On peut mettre de coté Windev.

L'objectif est de mieux gerer les logs de sortie et de regler certains plantage qui font que les backup ne se lancent pas et restent bloqués.

On veut evaluer powershell en gros, aucune idée pour le moment sur la gestion des erreurs de copie, c'est un point à travailler.

Je commence à le coder basiquement ensuite, j'améliorerai le tout. J'appronfondirais la semaine prochaine.

On voudrait utiliser powershell pour d'autres projets egalement donc je risque d'en manger. J'essai de commencer directement par les bonnes pratiques.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22121 par Laurent Dardenne
mood8moody écrit:

On m'a demandé pour le moment de convertir le script en powershell et de ne pas m'occuper de l'interface avec windev

:-)
mood8moody écrit:

Le script une fois éditè ne répond à mon avis qu'à un cas precis.

A priori oui.

mood8moody écrit:

L'objectif est de mieux gérer les logs de sortie et de régler certains plantage qui font que les backup ne se lancent pas et restent bloqués.

Powershell offre bien plus de possibilités que les batch, de la à dire que PS est la solution à vos problèmes, là je n'en sais rien.
mood8moody écrit:

On veut evaluer powershell en gros

Reste à définir les points à évaluer :-)
Et quels sont les OS ciblés ?

mood8moody écrit:

J'essai de commencer directement par les bonnes pratiques.

Définissez ce que sont pour vous, de manière générales, \&quot;les bonnes pratiques\&quot; d'un langage/shell.
Il y l' écriture du code et son contrôle .
Powershell existant depuis 10 ans il y a désormais de nombreux outils structurant son usage, mais de déjà comprendre les principes de base de powershell est un bon début :-)

On peut très bien te proposer une adaptation du code, mais si tu dois t'occuper de sa maintenance ce n'est pas te rendre service il me semble.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.053 secondes
Propulsé par Kunena