15Sep

Geek School: Écrire votre premier script PowerShell complet

Il y a quelques semaines, The Geek vous a montré comment utiliser l'invite de commande pour savoir quand votre ordinateur a été démarré en dernier. Dans cette dernière installation de Geek School for PowerShell, nous allons écrire une commande PowerShell réutilisable pour faire la même chose.

Assurez-vous de lire les articles précédents de la série:

  • Apprendre à automatiser Windows avec PowerShell
  • Apprendre à utiliser des applets de commande dans PowerShell
  • Apprendre à utiliser des objets dans PowerShell
  • Formater, filtrer et comparer dans PowerShell
  • Apprendre à utiliser Remoting dans PowerShellPowerShell
  • Utilisation de PowerShell pour obtenir des informations sur l'ordinateur
  • Utilisation des collections dans PowerShell
  • Apprentissage de l'utilisation des travaux dans PowerShell
  • Apprentissage de l'extension de PowerShell
  • Apprentissage des variables PowerShell, entrée et sortie

Ecriture de votre premier script

La première chose à faire esttrouver un moyen d'accéder à l'information que nous recherchons. Puisque nous traitons des informations de gestion, nous devons probablement examiner WMI, qui possède en effet une classe appelée Win32_OperatingSystem qui vous permet d'afficher des informations détaillées sur votre système d'exploitation, y compris la dernière fois qu'il a démarré.

Maintenant que nous savons où trouver les informations que nous recherchons, ouvrez l'ISE et tapez ce qui suit.

Get-WmiObject -Classe Win32_OperatingSystem -ComputerName localhost |

Select-Object -Propriété CSName, LastBootUpTime

Remarque: J'ai dû diviser mon code sur deux lignes de sorte que tout se corresponde à la capture d'écran, mais n'hésitez pas à le saisir sur une seule ligne. Si vous choisissez de le diviser sur deux lignes, assurez-vous que le caractère de tuyau est le dernier caractère de la ligne 1.

Cliquez maintenant sur le bouton vert "Exécuter le script" ou appuyez sur la touche F5 de votre clavier pour tester le code.

fois WMI peut être un peu énigmatique. Par cela nous voulons dire que si vous regardez la propriété LastBootUpTime, il dit 2013-03-19 à 18:26:21, mais pour une raison quelconque les gars de WMI ont décidé de concaténer tout cela en une seule chaîne. Heureusement pour nous, nous n'avons pas à nous soucier de l'analyse manuelle de la chaîne car il existe un moyen plus simple de le faire, bien que plus avancé.Vous devrez modifier la partie Select-Object du code pour ressembler à ceci:

Select-Object -Property CSName, @{ n = "Last Booted";

e ={ [Gestion. ManagementDateTimeConverter]: : ToDateTime( $ _. LastBootUpTime)}}

Ce que nous faisons ici est de créer une propriété personnalisée appelée "Last Booted" et de spécifier que sa valeur doit être le résultat de l'appel de la ToDateTime statiqueméthode sur la propriété LastBootUpTime de l'objet pipeline en cours. Votre code devrait maintenant ressembler à ceci.

Exécuter le code maintenant donnera un temps de démarrage beaucoup plus lisible.

Maintenant que nous sommes satisfaits des fonctionnalités de base de notre script, nous devons l'enregistrer. Pour plus de simplicité, enregistrons-le comme suit:

C: \ Get-LastBootTime.ps1

Passez maintenant à la moitié inférieure de l'ISE et exécutez ce qui suit:

C: \ Get-LastBootTime.ps1

Génial! Notre script fonctionne comme prévu, mais il y a toujours un problème avec notre script. Nous avons codé en dur le nom de l'ordinateur pour lequel nous voulons obtenir le dernier temps de démarrage. Au lieu des valeurs codées en dur, nous devrions plutôt fournir un paramètre pour que celui qui utilise le script puisse choisir l'ordinateur sur lequel il va exécuter le script. Pour ce faire, allez en haut de votre script et faites ce qui suit.

param(
[chaîne] $ ComputerName
)

Remplacez ensuite la valeur localhost codée en dur par la variable $ ComputerName. Votre script devrait maintenant ressembler à ceci:

Sauvegardez votre script, puis revenez à la moitié inférieure de l'ISE et affichez l'aide pour votre script.

aide C: \ Get-LastBootTime.ps1

Génial, maintenant nous pouvons spécifier le nom de l'ordinateur que nous voulons obtenir le dernier temps de démarrage pour l'utilisation de notre nouveau paramètre ComputerName. Malheureusement, il y a encore quelques erreurs. Premièrement, le paramètre ComputerName est optionnel et deuxièmement, c'est le plus laid que j'aie jamais vu, alors résolvons ces problèmes rapidement. Pour rendre le paramètre ComputerName obligatoire, modifiez le contenu du bloc param en suivant ce qui suit.

[Paramètre( Obligatoire = $ true)] [string] $ ComputerName

En ce qui concerne la création d'un meilleur fichier d'aide, la méthode la plus courante consiste à utiliser l'aide basée sur les commentaires. Cela signifie que nous ajoutons simplement un long commentaire au début du script.

& lt; #
. SYNOPSIS
Indique quand le PC a démarré pour la dernière fois.
. DESCRIPTION
Ceci est une fonction wrapper WMI pour obtenir le temps de démarrage de votre PC.
. PARAMETER ComputerName
Nom de l'ordinateur sur lequel vous souhaitez exécuter la commande.
. EXEMPLE
Get-LastBootTime - Nom de l'ordinateur localhost
. LINK
www.howtogeek.com
# & gt;

Une fois tout ce qui est fait, vous devriez vous retrouver avec un script ressemblant à ceci.

Allons maintenant voir notre nouveau fichier d'aide.

Ahhh, c'est génial! Maintenant que notre script est terminé, nous avons une dernière chose à faire: tester. Pour cela, je vais sortir de l'ISE et retourner dans la console PowerShell juste pour que nous puissions nous assurer qu'il n'y a pas d'anomalies.

Si vous commencez avec un simple liner et que vous continuez à construire dessus comme nous l'avons fait dans ce guide, vous le maîtriserez en un rien de temps. C'est tout pour cette fois les gens, on se voit dans la prochaine installation de Geek School.