Windows PowerShell Workflow est une nouvelle fonctionnalité de Windows PowerShell 3.0 qui plaira particulièrement aux administrateurs qui ont besoin d'exécuter des traitements multi-serveurs impliquant des tâches qui prennent du temps, parfois en séquence ou en parallèle, et supportant les redémarrages et les déconnexions. La fonctionnalité s'appuie sur Windows Workflow Foundation, et permet de définir des workflows en PowerShell en plus du XAML.
J'ai eu l'occasion de démontrer un workflow simple lors de l'événement de lancement de Windows Server 2012 le 24 octobre 2012, que je vais détailler un peu dans ces quelques lignes.
Le principe de ce workflow est le suivant : on souhaite déployer un site web sur une ferme de plusieurs serveurs qui ont déjà Windows Server 2012 et sont déjà membres d'un domaine. Sur chacun de ces serveurs, le workflow devra effectuer les opérations suivantes :
Voici le code du workflow en question (fichier : demoinstallwebsite1.psm1)
# Définition du workflow workflow Install-WebSite { # Activité : installation des prérequis workflow Install-Prerequisites { # Installe IIS et ASP.NET Install-WindowsFeature ` -Name Web-Server, Web-Asp-Net45, Web-Mgmt-Tools } # Activité : copie des fichiers du site web workflow Copy-WebContent { Remove-Item -Path c:\inetpub\wwwroot\* -Recurse Copy-Item -Path \\srv1\demo\website\wwwroot\* ` -Destination c:\inetpub\wwwroot -Recurse } # Corps du déploiement $computers = Get-PSWorkflowData[String[]] ` -VariableToRetrieve PSComputerName foreach -parallel($computer in $computers) { Install-Prerequisites Restart-Computer -Wait -For PowerShell -Force Checkpoint-Workflow Copy-WebContent } }
Le mot-clé workflow est utilisé pour le workflow global (Install-WebSite) mais aussi pour chacune des activités définies à l'intérieur. Cela garantit une exécution par le moteur de workflow de Windows, et donc la capacité d'exécuter les activités sur les différents serveurs.
La dernière partie exécute le script de déploiement en parallèle sur les plusieurs machines dont les noms sont passés en paramètre du workflow, grâce à l'instruction foreach -parallel. La commande Restart-Computer redémarre une machine, puis attend que la connectivité PowerShell soit à nouveau disponible. Remarquez également la commande Checkpoint-Workflow, qui sauvegarde l'état du workflow sur le disque au cas où un problème survienne.
Pour exécuter ce workflow de démonstration, j'ai préparé les éléments suivants (toutes les machines sont des VM hyper-V exécutant Windows Server 2012 Datacenter en-us, sauf mention contraire) :
Pour exécuter le workflow, ouvrir sur srv1 une fenêtre PowerShell et exécuter les commandes suivantes.
Cette dernière commande provoque l'exécution synchrone du workflow. Si l'on souhaite une exécution asynchrone, il faut regarder du côté des sessions déconnectées, qui feront peut-être l'objet d'un prochain article.
L'authentification CredSSP est spécifiée dans la commande, ce qui provoque la saisie du mot de passe du compte utilisé :
Avec cette méthode synchrone, l'intérêt est que nous pouvons suivre l'exécution du workflow par dessus la fenêtre PowerShell.
Sur la capture ci-dessus, nous voyons par exemple que web1 et web2 sont tous les deux en train de redémarrer.
La fin de la démo consiste à ouvrir les sites http://web1 et http://web2 pour vérifier que tout s'est bien déroulé.
Cet exemple ne donne qu'une petite idée des possibilités offertes par les workflows, je vous encourage donc à approfondir le sujet en parcourant les pages suivantes :
Et n'oubliez pas, téléchargez la version d'évaluation de Windows Server 2012 ici : http://aka.ms/jeveuxwindows2012. Une surprise vous y attend pour une période limitée.