Partager via


Présentation de Windows PowerShell et IIS 7.0

AuteurSaad Ladki

Introduction

Windows PowerShell est le langage d’interpréteur de commandes et de script de Microsoft. Cet article présente brièvement Windows PowerShell et IIS. En lisant cet article, vous allez comprendre exactement ce qu'est Windows PowerShell, vous en saurez davantage sur la relation entre Windows PowerShell et IIS et vous découvrirez comment Windows PowerShell facilite l'exécution des tâches de gestion de IIS.

Les informations contenues dans cet article sont précieuses pour les administrateurs informatiques, les développeurs et les testeurs de logiciels, ainsi que pour les responsables de l'entreprise. Même les sceptiques seront convaincus que Windows PowerShell est un outil indispensable.

À propos de Windows PowerShell

Windows PowerShell est l'environnement d’interpréteur de commandes et le langage de script de nouvelle génération de Microsoft. Considérons Windows PowerShell comme une mise à niveau spectaculaire de l'ancien interpréteur de commandes cmd.exe et des fichiers .BAT. Les utilisateurs se demanderont peut-être pourquoi créer un nouvel interpréteur de commandes alors que Cmd.exe fonctionne bien, et pourraient penser qu’ils n’ont pas le temps d'apprendre encore un langage de script. Windows PowerShell est une version améliorée des précédentes technologies de script de ligne de commande de Microsoft. Autrement dit, Windows PowerShell est plus facile à utiliser pour les tâches simples et complexes, et il est étonnamment facile à apprendre.

Voici quelques-unes des améliorations apportées par Windows PowerShell :

  • un langage de script mis à jour et cohérent
  • des fonctionnalités d’expression régulière intrinsèques
  • la possibilité d’appeler le .NET Framework, les extensions WMI et le registre Windows.

Cette section présente des exemples concrets et met en évidence quelques-unes des fonctionnalités de Windows PowerShell. Dans les sections suivantes, nous verrons comment Windows PowerShell fonctionne avec IIS.

Voici un exemple qui vous permettra de mieux connaître Windows PowerShell. Examinons la capture d'écran de la figure 1.

Screenshot of example PowerShell command prompt window.

Figure 1 : concepts de base de Windows PowerShell

Remarquez tout d'abord que l’interpréteur de commandes de Windows PowerShell ressemble à une invite de commandes Windows traditionnelle. L'utilisation de Windows PowerShell deviendra rapidement naturelle après une brève période d'adaptation.

La première commande est :

PS C:\> set-location Data

Cette commande invoque une cmdlet Windows PowerShell (prononcée « command-let ») pour modifier le répertoire de travail actuel de C:\ à C:\Data. Il s'agit de l'équivalent fonctionnel de l'ancienne commande cd (changer de répertoire). Vous avez sans doute remarqué que le fait de devoir taper « set-location » à chaque fois que vous changez de répertoire est fastidieux, et nous sommes d’accord.

Windows PowerShell dispose d'un ensemble complet d'alias de raccourcis que vous pouvez utiliser. La cmdlet « set-location » a pour alias « sl » (version abrégée du nom complet de la cmdlet) et « cd » (l'« ancienne » méthode). Pour simplifier la lecture, le présent article utilise la version complète des noms de cmdlets.

La deuxième commande est :

PS C:\Data> get-childitem Pow*

Cette commande répertorie le contenu du répertoire actuel qui commence par « Pow ». Windows PowerShell n'est pas sensible à la casse ; vous pouvez donc saisir Get-ChildItem ou GET-ChildItem. Le présent article utilise uniquement des minuscules. La cmdlet get-childitem est un alias à la fois de « dir » (pour les utilisateurs de Windows) et de « Is » (pour les utilisateurs d'Unix) et un alias de « gci » pour faciliter la saisie.

Utilisez ensuite la cmdlet « copy-item » pour copier le répertoire Windows PowerShell (notamment tous les sous-répertoires) dans un nouveau répertoire nommé « PSBackup » :

PS C:\Data> copy-item 'PowerShell' 'C:\Data\PSBackup' -recurse –force

Supprimez ensuite immédiatement le répertoire nouvellement créé et tout son contenu à l'aide de la cmdlet « remove-item » :

PS C:\Data> remove-item PSBackup –recurse

La commande suivante utilise la cmdlet « get-content » pour récupérer le contenu du fichier Hello.txt et l'enregistrer dans un nouveau fichier HelloCopy.txt dans le répertoire actuel en le transférant (avec le caractère « | ») à la cmdlet « out-file » :

PS C:\Data> get-content 'Hello.txt' | out-file '.\HelloCopy.txt'

L'avant-dernière commande utilise « get-content » pour afficher le contenu du nouveau fichier :

PS C:\Data> get-content HelloCopy.txt

La cmdlet « get-content » est à peu près équivalente aux commandes type (Windows) ou cat (Unix). Terminez la mini-démo en utilisant l'alias « sl » pour changer le répertoire de travail en lecteur racine :

PS C:\Data> sl \

Si Windows PowerShell se limitait à l'exécution de tâches courantes de navigation et de manipulation du système de fichiers au moyen d'un nouvel ensemble de commandes, il serait inutile de continuer à lire cet article. Une brève présentation d'un seul paragraphe pourrait conduire à cette supposition erronée. Toutefois, Windows PowerShell présente de nombreux avantages par rapport aux environnements d’interpréteurs de commandes actuels.

Pour terminer cette présentation de Windows PowerShell, nous tenons à dire que Windows PowerShell a une courbe d'apprentissage. Une nouvelle technologie est inutile si elle n’est pas simple à apprendre. Les programmeurs appellent ce processus « détectabilité ». Windows PowerShell a été conçu avec d’excellentes caractéristiques de détectabilité, ce qui facilite considérablement l’apprentissage.

Par exemple, vous pouvez obtenir une liste de tous les cmdlets en tapant simplement « get-command » à l'invite de Windows PowerShell. Vous pouvez également obtenir des informations détaillées sur une cmdlet particulière en tapant « get-help » suivi du nom de la cmdlet. Notre longue expérience d'enseignement de Windows PowerShell à des ingénieurs et des managers a démontré que la plupart des ingénieurs peuvent apprendre à utiliser Windows PowerShell en une seule journée de pratique.

Windows PowerShell dans un environnement IIS typique

La section précédente de cet article a donné un bref aperçu de Windows PowerShell. Toutefois, le véritable avantage de l'utilisation de Windows PowerShell réside dans la capacité de ce programme d’interagir avec IIS et de le gérer. Les ingénieurs qui lisent cet article peuvent se montrer sceptiques face aux « toutes dernières » revendications. Le présent article expliquera en quelques mots l’intérêt de Windows PowerShell. En effet, de nombreuses tâches de gestion d'IIS peuvent être accomplies grâce aux commandes et aux scripts Windows PowerShell, ainsi qu’aux outils de l'interface graphique d'IIS.

Avec IIS, vous avez désormais la possibilité d'effectuer de nombreuses tâches de gestion à l'aide des éléments suivants :

  • interface graphique utilisateur (GUI, Graphical User Interface)
  • Commandes Windows PowerShell interactives
  • Scripts Windows PowerShell.

Les utilisateurs qui ont beaucoup d’expérience en gestion de logiciels de serveur avec des shells et des scripts n'ont pas besoin d'être davantage motivés. Par contre, ceux qui ont l'habitude d'utiliser uniquement des outils GUI se demanderont peut-être l’avantage qu’il y a de pouvoir gérer IIS à l'aide d'une ligne de commande ou d'un script, alors qu'ils se débrouillent suffisamment bien avec MMC. La partie finale de cet article présente six avantages significatifs de la gestion d'IIS à l'aide de Windows PowerShell.

Vous trouverez ci-dessous quelques exemples de Windows PowerShell basés sur un transtypage Web avec Jeffrey Snover, architecte de Windows PowerShell, et Bill Staples, gestionnaire de l'unité de produit IIS.

Supposons que vous souhaitiez examiner les services liés à IIS qui s'exécutent sur votre ordinateur, ce qui est une tâche très courante. Pour ce faire, une « approche GUI » consiste à lancer la MMC, à développer la catégorie Services et applications, puis à sélectionner la catégorie Services. Le résultat ressemble à la capture d'écran de la figure 2.

Screenshot of the Computer Management Window. Services and Applications expanded. Services Category highlighted.

Figure 2 : utilisation de la MMC pour obtenir des informations sur les services

Il est facile de dresser la liste des services Windows à l'aide de Windows PowerShell. Par exemple, à l'invite de Windows PowerShell, utilisez la cmdlet « get-service » :

PS C:\> get-service

Cela peut ne pas sembler extraordinaire, mais imaginons que vous souhaitiez répertorier uniquement les services commençant par la lettre « w » et les trier en fonction de leur état. L’une de manières est la suivante :

PS C:\> get-service -include w* | sort-object -property status

Vous pouvez interpréter cette commande comme s’il s’agissait de récupérer toutes les informations sur les services Windows, mais ensuite la filtrer pour n'inclure que les services dont le nom commence par la lettre « W », puis trier ces résultats en fonction de l'état du service (en cours d'exécution, arrêté, en pause). Le résultat ressemblerai à la capture d'écran de la figure 3.

Screenshot of PowerShell window displaying results of service status information.

Figure 3 : utilisation de Windows PowerShell pour obtenir des informations sur les services

Comme indiqué dans la section précédente, vous pouvez saisir des commandes PowerShell concises. Notamment, la commande précédente peut être raccourcie à :

PS C:\> gsv w* | sort status

Ici, on utilise « gsv », qui est un alias de « get-service ». On profite du fait que le commutateur « -include » se trouve à la première position du paramètre, en utilisant « sort », qui est un alias de la cmdlet « sort-object ». Le commutateur « -property » se trouve à la première position du paramètre. Supposons maintenant que vous souhaitiez arrêter le service de publication du World Wide Web. Sans PowerShell, vous pouvez faire un clic droit sur le service W3SVC pour accéder à son menu contextuel et cliquer sur l'élément « Stop ». Avec Windows PowerShell, vous pouvez lancer la commande :

PS C:\> stop-service -servicename w3svc

ou, sous forme abrégée :

PS C:\> spsv w3svc

Une autre tâche courante consiste à examiner les processus en cours d'exécution sur une machine. À ce stade, Windows PowerShell vous permet de prévoir comment le faire. Le système de dénomination cohérent et logique des cmdlets de Windows PowerShell permet de deviner facilement les commandes :

PS C:\> get-process

Supposons que vous souhaitiez afficher les processus en cours d'exécution classés par nombre de descripteurs appartenant à chaque processus :

PS C:\> get-process | sort-object -property handles

Vous pouvez obtenir ces informations tout aussi facilement à l’aide du gestionnaire de tâches Windows basé sur l'interface graphique. Observez toutefois ce que font ces trois commandes Windows PowerShell :

PS C:\> $p = get-process
PS C:\> $result = $p | measure-object -property handles -sum -average -max
PS C:\> $result | out-file '.\ProcessHandleStats.txt'

La première commande, $p = get-process, récupère toutes les informations relatives aux processus en cours d'exécution sur la machine hôte et les stocke dans la variable $p.

La deuxième commande, $result = $p | measure-object -property handles -sum -max, envoie les informations saisies relatives aux processus à la cmdlet « measure-object », qui calcule la somme, la moyenne et la valeur maximale de tous les descripteurs utilisés par les processus en cours d'exécution, et stocke ces informations dans la variable « $result ». Si vous examinez « $result » à ce stade, vous verrez approximativement :

Nombre de  : 54
Moyenne : 273.148148148148
Somme : 14 750
Total maximum de : 1 625
Minimum :
Propriété : Descripteurs

Dans cet exemple, 54 processus sont en cours d'exécution et 14 750 descripteurs sont utilisés, soit une moyenne d'environ 273 descripteurs par processus. Le plus grand nombre de descripteurs utilisés par un processus est de 1 625 descripteurs.

La troisième ligne, $results | out-file '.\ProcessHandleStats.txt', enregistre les résultats dans un fichier texte. Les utilisateurs expérimentés de Windows PowerShell combineront probablement les trois commandes que nous venons de décrire en une seule commande, comme :

PS C:\> gps | measure-object handles -sum -average -max |
        out-file '.\ProcessHandleStats.txt'

L'une des caractéristiques de l'architecture Windows PowerShell est qu'elle est facilement extensible à tous les niveaux, tant par les utilisateurs que par les entreprises tierces. L'extensibilité de Windows PowerShell est un thème à part entière, dont voici un exemple.

Dans la démonstration Web cast référencée à la fin de cet article, Jeffrey Snover et Bill Staples présentent une cmdlet de sortie de visualisation Windows PowerShell remarquable, développée par une entreprise tierce. Cette cmdlet s'appelle « out-gauge ». Vous remarquerez la similitude sémantique avec la cmdlet intrinsèque « out-file ». Plutôt que d'envoyer le résultat à un fichier comme le fait « out-file », « out-gauge » envoie le résultat à un ensemble de contrôles visuellement riches. Par exemple, l'une des commandes présentées dans le Webcast est la suivante :

PS C:\> get-process |
        measure-object handles -sum |
        out-gauge -value sum -refresh 0:0:1 -float -type

Cette commande produit une jauge numérique flottante sur l'écran qui affiche le nombre total de descripteurs utilisés en temps réel et met à jour l'affichage toutes les secondes. Cela démontre qu'une vaste gamme d'outils très utiles basés sur Windows PowerShell sera bientôt disponible.

Voyons maintenant un exemple de déploiement d'un site Web IIS à l'aide de Windows PowerShell. Du fait que les versions précédentes d'IIS stockent la configuration dans la métabase, il n'est pas possible de copier un site Web d'une machine à l'autre. Avec IIS, le déploiement d'un site Web se résume à une simple copie de fichiers. Prenons l'exemple de ce script Windows PowerShell :

# file: Deploy-Application.ps1

$sourceMachine = "DemoServer1"
$farmList = get-content '.\RestOfFarm.txt'
$filesToCopy = get-content '.\AppManifest.txt'

foreach ($targetMachine in $farmList)
{
   foreach ($file in $filesToCopy)
   {
      $sourcePath = "\\" + (join-path $sourceMachine $file)
      $destPath   = "\\" + (join-path $targetMachine $file)
      write-host -for yellow "$targetMachine : Copying files from
        $sourcePath"

      copy-item $sourcePath $destPath
        -recurse -force
   }
}

Ce script est certes complexe, mais instructif. Lorsqu'il est enregistré en tant que fichier Deploy-Application.ps1 et exécuté à partir d'une ligne de commande Windows PowerShell, il se présente comme suit :

PS C:\> .\Deploy-Application.ps1

l'effet final est de copier tous les fichiers figurant dans le fichier AppManifest.txt qui se trouve sur la machine DemoServer1 dans toutes les machines figurant dans le fichier RestOfFarm.txt. Windows PowerShell a pour caractéristique que les scripts sont bien écrits et donc plus faciles à comprendre, par rapport aux alternatives telles que VBScript ou Perl. Le script utilise la cmdlet « get-content » pour lire les noms de machines du fichier RestOfFarm.txt et les noms de fichiers du fichier AppManifest.txt.

La boucle « foreach » est peut-être une nouveauté pour vous. La boucle extérieure itère chaque nom de machine stocké dans la variable « $farmList » et stocke un nom après l’autre dans la variable « $targetMachine ». La boucle interne est similaire et stocke chaque fichier tour à tour dans « $file ». La cmdlet « join-path » permet de concaténer intelligemment des chaînes de caractères afin de produire des chemins d'accès complets pour la source et la destination.

Enfin, la cmdlet « copy-item » effectue les actions de copie, où le commutateur « -recurse » copie tous les sous-répertoires et le commutateur « -force » écrase les fichiers existants. Vous remarquerez que toutes les informations relatives aux emplacements de la source et de la destination sont codées en dur dans ce script. Windows PowerShell dispose d'excellentes capacités de passage de paramètres, de sorte que cet exemple de script pourrait être paramétré pour accepter des informations provenant de la ligne de commande. Cependant, ce sujet n’est pas compris dans les thèmes traités par cet article.

Windows PowerShell avec IIS

Jusqu’ici, cet article a présenté des exemples de Windows PowerShell applicables à n'importe quel serveur. Nous allons maintenant examiner quelques cmdlets Windows PowerShell spécifiques à IIS.

IIS offre la possibilité de mettre en cache le contenu créé de façon automatique. IIS permet depuis longtemps de mettre en cache des pages statiques. Lorsque le serveur reçoit de nouvelles requêtes de clients pour un contenu récemment demandé, le processus est le suivant : il n’est pas nécessaire de récupérer ce contenu à partir d'un stockage externe, car le contenu demandé peut être extrait immédiatement de la mémoire cache et renvoyé au client. Les performances sont ainsi considérablement améliorées. IIS reprend cette idée et permet également la mise en cache des pages créées dynamiquement. Examinez cette pré-version de la cmdlet IIS Windows PowerShell :

PS C:\> add-iiscaching
        -computer $computerlist
        -path Demo
        -location index.php
        -credential $cred
        -extension .php
        -kernelcachepolicy 0
        -itemlocation 0
        -policy 1
        -varybyquerystring "Qwd,Qif,Qiv,Qis"

L'écriture de cmdlets personnalisées n’est pas traitée dans cet article. Toutefois, cet exemple donne une idée du type de cmdlets que vous pouvez écrire et que la communauté IIS écrira. La cmdlet se nomme « add-iiscaching ». Comme nous l'avons dit plus haut, Windows PowerShell possède une architecture extensible qui permet à l'équipe de développement IIS de créer des cmdlets personnalisées fonctionnant directement avec IIS. Cette commande a pour effet d'activer la mise en cache dynamique pour les requêtes de page contenant Qwd, Qif, Qiv et Qis dans la chaîne de requête en cas d’application PHP particulière sur tous les serveurs IIS dont les noms sont stockés dans la variable $computerlist.

Le point essentiel est certes explicite (le fait que vous pouvez facilement améliorer les performances d'IIS à l'aide d'une simple commande Windows PowerShell), mais l'article présente en détail les paramètres du commutateur dans cet exemple.

Premier argument : « -computer $computerlist » précise les machines sur lesquelles la commande « add-iiscaching » doit être exécutée. Par exemple, si vous avez un simple fichier texte nommé « MyServers.txt » avec des noms de machines comme :

demo1server
demo2server
demo3server
demo4server

, la commande

PS C:\> $computerlist = get-content '.\MyServers.txt'

lit la liste des serveurs en « $computerlist » variables.

Deuxième argument : « -path Demo » pointe vers le chemin racine de l'application sur laquelle vous souhaitez activer la mise en cache. Dans cet exemple, comme la valeur du chemin ne contient pas d'espaces, il est possible d'omettre les caractères de citation, bien qu'ils auraient pu être utilisés comme -chemin « Demo ».

Troisième argument :« -location index.php » pointe vers l'application cible. Quatrième argument : « -credential $cred » contient les informations d'authentification dans la variable $cred. Ceci est nécessaire, car nous allons copier des fichiers sur des machines distantes. Ces informations peuvent également être capturées par la cmdlet intrinsèque « get-credential », comme :

PS C:\> $cred = get-credential

Cette commande lance une interface graphique dans laquelle l'utilisateur peut spécifier un nom d'utilisateur et un mot de passe, et les résultats sont stockés dans la variable « $cred ».

Cinquième argument : « -extension .php » spécifie le type d'application à mettre en cache.

Sixième argument :« -kernelcachepolicy 0 » indique à la cmdlet « add-iiscaching » de ne pas mettre en cache les informations du noyau.

Septième argument : « -itemlocation 0 » indique où mettre en cache les informations de réponse ; 0 signifie qu'elles doivent être stockées sur le client ou le serveur.

Huitième argument : « -policy 1 » signifie qu'il faut poursuivre la mise en cache jusqu'à ce qu'il y ait un changement dans l'élément de cache sous-jacent (par opposition à la mise en cache pendant un intervalle de temps spécifié).

Dernier argument : -varybyquerystring « Qwd, Qif, Qiv, Qis » indique à IIS le type de réponse à mettre en cache : dans ce cas, les réponses aux requêtes contenant Qwd, Qif, Qiv et Qis dans la chaîne de requête. (Il s'agit des parties spécifiques des paires nom-valeur utilisées par l'application PHP dans cet exemple.)

Pour résumer

Cet article a présenté tout d’abord un aperçu de Windows PowerShell, le nouvel environnement interpréteur de commandes et langage de script de Microsoft. Il a présenté quelques exemples typiques de navigation et de manipulation de fichiers Windows PowerShell et a signalé que Windows PowerShell va bien au-delà des environnements shell existants.

La deuxième section de cet article explique comment utiliser Windows PowerShell dans un environnement typique où IIS est utilisé. Elle présente des exemples examinant des services et processus Windows sur une machine hôte. Elle fournit également une liste de quelques-uns des avantages d’utiliser Windows PowerShell pour gérer et interagir avec IIS.

Voici six commentaires que les premiers adeptes de Windows PowerShell ont formulé à propos de ces avantages. Ils incluent également certains avantages obtenus par l'équipe IIS.

  1. Le fait de pouvoir stocker les commandes Windows PowerShell sous forme de scripts permet de les sauvegarder et les exécuter de manière spontanée. Cet avantage s'applique à toutes les techniques basées sur des scripts, mais Windows PowerShell est nettement plus facile à utiliser que les autres langages de script existants.
  2. Etant donné que les commandes Windows PowerShell peuvent être stockées et utilisées comme des scripts, elles créent un enregistrement auto-documenté de l'activité de gestion de l'IIS. Combien de fois vous est-il arrivé de devoir vous rappeler comment vous aviez modifié une clé de registre à l'aide de l'interface graphique regedit.exe ?
  3. Par rapport aux interfaces de gestion basées sur les GUI, les commandes Windows PowerShell « éliminent le mystère » et vous permettent de voir exactement ce qui se passe. Les outils basés sur une interface graphique allègent les activités de gestion. Toutefois, l'utilisation d'outils basés sur une interface graphique peut conduire à des réflexions du type : « Je ne sais pas exactement pourquoi cela fonctionne, mais lorsque je double-clique sur ceci, cela résout généralement le problème ».
  4. Étant donné que de nombreux autres produits serveur Microsoft seront basés sur Windows PowerShell, chaque fois que vous utilisez des commandes et des scripts Windows PowerShell pour gérer IIS, vous vous formez indirectement à d'autres systèmes.
  5. L'utilisation de Windows PowerShell crée un paradigme de gestion et un moyen de communication communs : les communautés Windows PowerShell se développent rapidement et il est beaucoup plus facile de comprendre la documentation ou les articles de blog se présentant sous forme de commandes Windows PowerShell que de comprendre une documentation du type « Ouvrez MMC, puis cliquez ici, puis cliquez là, puis double-cliquez là-haut. . . »
  6. Comme Windows PowerShell est un environnement complet, vous pouvez y effectuer la majeure partie de votre travail. Il n'est pas nécessaire de passer constamment d'un programme basé sur une interface graphique à un shell cmd.exe, puis à un autre programme basé sur une interface graphique. Cela ressemble à la manière dont les activités de développement de logiciels ont évolué, passant de l'utilisation de compilateurs, d'éditeurs de liens, de débogueurs, etc. à l'utilisation d'un environnement intégré tel que Visual Studio.

La deuxième section de ce document a également montré un exemple de script Windows PowerShell illustrant la capacité d'IIS à déployer des serveurs Web sur plusieurs machines à l'aide de simples opérations de copie de fichiers.

La troisième partie de ce document explique comment la conception de Windows PowerShell permet à la communauté IIS de créer et de partager des cmdlets Windows PowerShell personnalisés utilisables directement avec les fonctionnalités natives d'IIS. Elle présente notamment « add-iiscaching », une cmdlet de pré-version qui permet d'activer la capacité d'IIS à mettre en cache les pages créées dynamiquement.

Même si cet article n'explique qu'en partie la façon dont Windows PowerShell et IIS fonctionnent ensemble, il devrait vous avoir convaincu que ce tandem offre une expérience de gestion informatique plus facile, plus efficace et plus agréable.

Ressources de Windows PowerShell et IIS

Search Channel 9 s'est associé à Microsoft Learn pour la diffusion sur le Web mettant en scène Jeffrey Snover, architecte de Windows PowerShell, et Bill Staples, gestionnaire de l'unité de produits IIS, qui a servi de base à l'article.

Pour en savoir plus sur les outils de visualisation basés sur Windows PowerShell, cliquez ici.

Pour plus d’informations sur Microsoft IIS, consultez le sitewww.iis.net.

À propos de l’auteur

Le Dr James McCaffrey travaille pour Volt Information Sciences, Inc. et gère la formation technique des ingénieurs logiciels qui travaillent sur le campus de Microsoft à Redmond, dans l'État de Washington. Il a travaillé en tant qu'ingénieur principal sur plusieurs produits phares de Microsoft, notamment Internet Explorer et MSN Search, et est l'auteur de « .NET Test Automation : A Problem-Solution Approach », Apress, 2006.