Les objets dynamiques dans Active Directory
Ce compte utilisateur s'auto-détruira dans trois, deux, un...
Pour ça j’avais envie de vous partager une commande assez spécifique mais qui peut avoir son utilité : Invoke-Expression
Ma fonction :
function LaFormuleMagique {
param([Int64]$i)
$expression = ([string]$i).ToCharArray() -join '+'
$result = Invoke-Expression -Command $expression
return $result
}
En version courte, le cœur de la fonction peut être résumé à : iex("$i".ToCharArray()-join'+')
On va y aller étape par étape :
([string]$i)
: permet de convertir le nombre entier en une chaine de caractères
PS C:\> $i = [string]2568
.ToCharArray()
: une fois que l’entier est transformé, on peut utiliser la méthode ToCharArray pour convertir la chaine “2568” en un tableau avec les valeurs 2, 5, 6 et 8
PS C:\> $i = $i.ToCharArray()
PS C:\> $i
2
5
6
8
-join '+'
: on réassemble ensuite le tableau en joignant les caractères entre eux avec un “+”
PS C:\> $i = $i -join '+'
PS C:\> $i
2+5+6+8
Une fois notre chaine de caractère prête, il ne reste plus qu’à l’interpréter comme une ligne de commande. Et pour ça on peut utiliser la commande Invoke-Expression
(iex
pour les intimes) :
PS C:\> Invoke-Expression $i
21
Trouvée par @Clément Vigier.
Ici pas le temps de niaiser, on va aller directement à la solution sans chercher à utiliser une commande aussi peu efficace que Invoke-Expression
. On va utiliser une méthode différente pour découper notre nombre (via -split
) et l’incontournable commande Measure-Object
pour compter la somme de nos chiffres. Voilà ce que ça donne en code :
function LaFormuleMagique {
param([Int64]$i)
$result = $i -split '' | Measure-Object -Sum
return $result.Sum
}
On commence par découper notre nombre via un -split ''
qui a un avantage et un inconvénient par rapport à la méthode que j’ai utilisé. D’un côté il n’y a pas besoin de convertir notre nombre en une chaine de caractère, mais de l’autre côté : découper un nombre de quatre chiffres nous donne 6 items en résultat :
PS C:\> 2568 -split ''
2
5
6
8
Si vous ne voyez pas les six items, sachez qu’il y a un item vide avant le 2 et un item vide après le 8. Vous pouvez vous en débarrasser avec la méthode .Trim()
si ça vous dérange, mais dans notre cas ils n’auront aucun impact sur notre calcul puisque 0+2+5+6+8+0 donne le même résultat que 2+5+6+8. Il ne nous reste plus qu’à calculer la somme de tous nos chiffres, et pour ça on utilise la commande Measure-Object
qui permet de faire bien plus que simplement compter le nombre d’items dans une collection.
En effet, Measure-Object
permet de :
On va donc utiliser le paramètre -Sum
pour demander à PowerShell de nous calculer la somme des chiffres présents dans notre liste.
Ce compte utilisateur s'auto-détruira dans trois, deux, un...
Commentaires