Le Cloud de Romain LOIZEAU

Voici un petit billet "pense bête" pour les amateurs de Powershell. Rien d'extraordinaire ici, nous allons juste voir comment inclure une propriété calculée dans un export-csv.

Pour expliquer ce qu'est une propriété calculée et comment l'utiliser, je vais me servir d'un exemple tout simple:

Exemple: Nous souhaitons exporter la date de dernière connexion de plusieurs utilisateurs dans l'Active Directory.

Dans un premier temps, nous allons voir comment retourner la dernière date de connexion pour un utilisateur.

Pour cela nous utilisons le cmdlet "Get-ADUser" en spécifiant la propriété "LastLogon" ce qui nous donne (attention à ne pas oublier d'importer le module Active Directory) :

Get-ADUser -Identity <user_identity> -Properties "LastLogon"

Le souci ici est que la propriété "LastLogon" retourne un timestamp calculé à partir du 1er Janvier 1600. Pour que la donnée soit exploitable, il faut la convertir en type "Date" et en ajoutant 1600 années.

Pour cela, créons une fonction "Convert-ADDate", qui prendra en paramètre le timestamp retourné par la propriété "LastLogon" et retournera la date correcte calculée:

Function Convert-ADDate ($d){ 

$adDate = Get-Date -Date $d 

return $adDate.AddYears(1600) 

}

Maintenant nous allons utiliser cette fonction pour calculer la date calculée. Ceci donnerait:

$user = Get-ADUser -Identity "loizeaur" -Properties "LastLogon"

$lastLogon = Convert-ADDate($user.LastLogon)

Comment inclure ce calcul dans un script afin d'identifier les dates de connexions d'une série d'utilisateurs?

Rien de plus simple, nous allons utiliser les propriétés calculées de Powershell dans l'exemple de code très simple qui suit, où nous allons récupérer le nom de l'utilisateur, sa date de dernière connexion ainsi que son adresse email:

Import-CSV "users.csv" | foreach $_ { 

Get-ADUser -Identity $_.userName -Properties "lastLogon","mail"

} | select-object Name,@{Name="Last Logon Date";Expression={Convert-ADDate(lastLogon)}}, mail | Export-CSV "'lastLogon.csv"

(Petite précision, notre fichier CSV en entrée "users.csv" contient la liste des utilisateurs - avec une propriété identifiable unique, type samAccountName ou DN - avec pour entête userName)


La syntaxe d'une propriété calculée est la suivante :

@{Name=<nom_de_la_propriété>;Expression={<expression_de_la_propriété}}

Dans l'exemple ci-dessus nous utilisons @{Name="Last Logon Date";Expression={Convert-ADDate(lastLogon)}} qui nous permet de retourner une valeur nommée "Last Logon Date" et qui aura pour valeur la date "correcte" de dernière connexion calculée à partir de la fonction Convert-ADDate.

Voilà, rien de bien méchant! Cette technique est très efficace car elle permet d'avoir très rapidement des données exploitables en très peu de lignes!
Facebook Like
Anonymous