Mettre une Task Sequence en pause à la volée avec juste une variable

Dans cet article, je vais vous expliquer comment mettre vos Task Sequence (MDT, SCCM) en pause à la volée à l’aide d’une variable.
Il sera alors possible de mettre une TS en pause quand on le souhaite et autant de fois que l’on veut sans avoir à ajouter un step dans sa TS.

Contexte

Vous souhaitez tester quelque chose pendant un déploiement ou voir la valeur de certaines variables, voir des logs…
Pour cela vous souhaitez pouvoir mettre en pause votre Task Sequence.
Vous ne voulez pas mettre en pause la TS uniquement à un moment donné mais quand vous voulez.
Vous souhaitez pouvoir mettre en pause votre TS en appuyant par exemple sur la touche F4 (ou autre).

La méthode existante

Il existe de nombreux posts relatifs sur “Comment mettre en pause une TS”.
Ci-dessous quelque uns de ces articles:

Dans tous ces articles la méthode utilisée est de créer un step dans la TS pour afficher un msgbox, ce qui signifie que la pause sera effective uniquement au moment de la réalisation du step concerné.
Si vous souhaitez à nouveau mettre en pause votre TS, il faudra arrêter le déploiement, ajouter un nouveau step et recommencer le déploiement.

La nouvelle méthode

Avec cette nouvelle méthode, plus besoin d’ajouter un step dans votre TS.
Il sera possible de mettre en pause une TS dynamiquement, autant de fois que vous le souhaitez, sans toucher à la TS.

Comment cela fonctionne ?

Pour cela j’ai procédé tel que ci-dessous:

  1. Pour pouvoir mettre en pause la TS dynamiquement, modifiez le fichier ztiutility.vbs
  2. Ajoutez une nouvelle variable TSPause
  3. Si cette variable à comme valeur TRUE, alors on affiche un msgbox
  4. Ce msgbox permettra de mettre en pause la TS
  5. Une fois que l’on clique sur le bouton OK du msgbox, la TS reprend et la variable TSPause aura à nouveau comme valeur FALSE

Comment l’implémenter ?

  1. Ouvrez le fichier ztiutility.vbs
  2. Cherchez la fonction Public Function ReportProgress. J’ai choisi cette fonction car elle est utilisée durant tout le déploiement.
  3. Ajoutez le code ci-dessous en dessous de la partie : Dim uMaxStep
    Dim TS_Pause_Status
    If oEnvironment.Item("TSPause") = "TRUE" Then
    TS_Pause_Status = MsgBox ("Click on OK to continue the TS", vbOkOnly + vbQuestion, "TS in pause")
    If TS_Pause_Status = vbOK Then
    oEnvironment.Item("TSPause") = "FALSE"
    End if
    End If
  4. Mettez à jour votre deployment share

Pause dynamique en action

Dans l’exemple suivant je procède tel que ci-dessous:

  1. Créer l’objet PowerShell TS
    $TSEnv = New-Object -comobject Microsoft.SMS.TSEnvironment
  2. Attribuer la valeur TRUE à la variable TSPause
    $TSEnv.Value("TSPause") = "TRUE"
  3. Un msgbox sera affiché
    Ci-dessous l’exemple en action :

Dans l’exemple suivant, j’ai ajouté un bouton Pause dans mon outil TS Debugger for MDT.
Pour plus d’infos sur cet outil, voir ce lien.

Le UserVoice

Il y a 3 ans, j’avais créé un article sur comment ajouter le pourcentage de progression complet dans la barre de progression de la TS.
J’ai également créé un UserVoice afin que cela soit implémenté dans une des prochaines versions de SCCM.
Celui-ci a été récemment accepté et cet ajout sera prochainement implémenté, voir ici.

C’est pourquoi j’ai créé un autre UserVoice afin d’ajouter la pause dynamique via une variable dans SCCM.
Cliquez ici pour voter pour cet ajout.

A propos de l'auteur

Damien VAN ROBAEYS

Ingénieur Systèmes travaillant principalement sur ce qui tourne autour du poste de travail (MDT, SCCM, Intune) et l’automatisation avec PowerShell. MVP Microsoft et auteur pour ENI, il publie régulièrement sur son blog et gère différents groupes Facebook, PowerShell et WPF (~4000 membres), Windows Autopilot (~3000 membres).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *