Get-Date : Manipuler la date en PowerShell

I. Présentation

PowerShell dispose d'un commandlet officiel pour récupérer la date et l'heure sur une machine : Get-Date. Derrière ce nom de commande facile à retenir, se cache un outil indispensable pour nos scripts PowerShell et on s'en servira notamment pour : alimenter un fichier de log avec la date et l'heure des différents événements, comparer la date actuelle avec la date d'un objet (exemple fichier), etc.

II. Récupérer la date sous différents formats avec PowerShell

Tout d'abord, je vous propose de voir comment récupérer la date sous différentes formes afin que vous puissiez adapter la valeur retournée par Get-Date à vos besoins.

Get-Date

Le format de sortie par défaut est le suivant : samedi 9 mars 2019 13:57:13

Avec le paramètre Format, nous allons pouvoir le personnaliser en jouant avec les lettres "m", "d", "y", "h", "s", "f" où la casse est importante et impacte le résultat retourné.

Je vous propose ci-dessous quelques exemples :

  • Obtenir la date sous la forme "AnnéeMoisJour"
Get-Date -Format "yyyyMMdd"
20190310
  • Obtenir la date sous la forme "Jour/Mois/Année"
Get-Date -Format "dd/MM/yyyy"
10/03/2019
  • Obtenir l'heure sans les secondes :
Get-Date -Format "HH:mm"
08:36
  • Obtenir le mois en toute lettre :
Get-Date -Format "MMMM"
mars
  • Obtenir la date et l'heure séparées par un underscore sous la forme "AnnéeMoisJour_HeureMinute"
Get-Date -Format "yyyyMMdd_HHmm"
20190310_0822
  • Pour obtenir seulement l'heure avec les secondes :
Get-Date -DisplayHint Time
13:58:58
  • Ce qui est valable aussi pour la date (dans son format par défaut) :
Get-Date -DisplayHint Date
samedi 9 mars 2019
  • Récupérer une date spécifique

Pour récupérer de façon statique une date et la stocker dans une variable pour hériter du bon type de valeur (DateTime), on peut directement faire cela :

$DateHeureStatique = (Get-Date -Year 2019 -Month 04 -Day 16 -Hour 00 -Minute 00)

Avec ces quelques exemples, j'espère que vous allez pouvoir trouver un format qui vous convienne ! 🙂

III. Calculer une date avec AddDays

Dans un script, par exemple qui cible l'Active Directory, on peut chercher à obtenir la liste des comptes utilisateurs non utilisés ces 90 derniers jours. Pour cela, il va falloir obtenir une variable contenant la date d'il y a 90 jours, de façon glissante puisque cette date va changer tous les jours.

Pour calculer une date, nous allons utiliser la méthode AddDays() qui s'applique directement à Get-Date et qui attend un nombre comme valeur. Si le nombre est positif, le nombre de jours sera ajouté à la date du jour, s'il est négatif, il sera soustrait et la date calculée sera retournée.

Pour soustraire 90 jours à la date du jour, cela nous donne :

(Get-Date).AddDays(-90)

Par exemple :

Write-Output "Date du jour : $(Get-Date)"
Write-Output "Date il y a 90 jours : $((Get-Date).AddDays(-90))"
Write-Output "Date dans 90 jours : $((Get-Date).AddDays(90))"

Ce qui retourne :

Votre date de référence étant calculée, vous allez pouvoir comparer facilement cette date avec une autre ! Une condition dans votre script avec -lt ou -gt sera très efficace pour savoir si une date est "plus grande" qu'une autre ou pas.

Note : Si vous avez besoin d'additionner ou soustraire des heures, des minutes ou des secondes, c'est possible ! Il suffit d'utiliser la méthode adaptée : AddHours(), AddMinutes(), AddSeconds() ou encore AddMonths() pour les mois.

IV. Convertir la date en timestamp

L'horodatage (timestamp) est une valeur numérique qui a pour objectif de représenter la date et l'heure selon un format bien précis. Dans certains cas, vous pourriez avoir besoin de comparer deux timestamps, si vous avez un timestamp d'un côté et la date/heure dans un autre format de l'autre, ça pose problème.

Il est alors nécessaire de convertir la chaîne "date - heure" en valeur timestamp. Pour y parvenir, nous allons utiliser la méthode ToFileTime() issue de .NET Framework.

Ce qui nous donne :

(Get-Date).ToFileTime()
131975864278102003

La valeur retournée est alors un horodatage.

V. Récupérer d'autres informations liées au calendrier

Au-delà de la date et l'heure, la commande Get-Date peut vous permettre d'obtenir d'autres informations liées au calendrier directement, par exemple : comment savoir quel jour de l'année on est grâce à PowerShell

(Get-Date).DayOfYear
70

On peut obtenir la même information mais pour avoir le numéro du mois en cours :

(Get-Date).Month
3

Il est aussi possible d'obtenir des détails sur le jour en cours : combien est-ce qu'il y a eu de secondes écoulées aujourd'hui, et même de millisecondes ? Via cette commande c'est facile :

(Get-Date).TimeOfDay

Days : 0
Hours : 8
Minutes : 17
Seconds : 12
Milliseconds : 644
Ticks : 298326447959
TotalDays : 0,345285240693287
TotalHours : 8,28684577663889
TotalMinutes : 497,210746598333
TotalSeconds : 29832,6447959
TotalMilliseconds : 29832644,7959

Ce tutoriel touche à sa fin, je pense qu'avec ces différents exemples, vous avez désormais une bonne base pour manipuler la date et l'heure dans vos scripts PowerShell !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5568.Voir tous les posts

5 thoughts on “Get-Date : Manipuler la date en PowerShell

  • Et comment formater la date au format us-US alors que les locales sont en français sur un serveur ?

    Typiquement pour Get-Date -format ‘ddd MMM d H:mm:ss « CET » yyyy’ ?

    Répondre
  • comment avoir le nombre d’apparition d’une date donnée entre deux intervalles de temps ?

    Répondre
    • Bonjour Wendy,

      Je ne suis pas sûr d’avoir compris… En faisant une soustraction des années ? Peux-tu me donner un exemple de ce que tu cherches à faire stp ?

      Merci
      Florian

      Répondre
  • comment faire une concaténation de la date avec le nom d’un fichier

    Répondre
    • Bonjour,
      Tu veux former le nom d’un fichier avec du texte et la date ou renommer un fichier existant pour ajouter la date ?

      Répondre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.