Powershell - type accelerator

Pour me soutenir, vous pouvez vous abonner à la chaîne, partager et liker les vidéos, désactiver votre bloqueur de pub ou encore faire un don. Merci!

Bonjour,

Les types accelerators dans Powershell sont des alias pour des types ou classes .NET.
Leur utilisation peut permettre de raccourcir les syntaxes, de les simplifier et d’obtenir un gain de performance.

# Lister les types accelerators
[PSObject].Assembly.GetType('System.Management.Automation.TypeAccelerators')::Get
## Quelques exemples d'utilisation
# Générer un identifiant
[PSCredential]::New("titi", (ConvertTo-SecureString 'P@ssword' -AsPlainText -Force))
# Equivalent de
$password = ConvertTo-SecureString 'P@ssword' -AsPlainText -Force
New-Object System.Management.Automation.PSCredential('titi', $password)
# Manipuler facilement une URL
$url = [uri]"https://www.altf4-formation.fr/powershell"
$url.host
$url.localpath
# Vérifier un email, conversion en type [mailaddress]
[mailaddress]"test@test.com"
# Vérifier une adresse IP, conversion en type [ipaddress} :
[IPAddress]'10.0.0.2'
# Mais on se rend compte qu'il arrive à convertir aussi cette valeur :
[IPAddress]'10.2'
# On peut contrer le problème de cette manière
$ip = '10.0.0.2'
($ip -as [IPAddress]).IPAddressToString -eq $ip
# "Equivalent" à l'expression régulière suivante :
"255.25.190.241" -match "^([01]?\d?\d\.|2[0-4]\d\.|25[0-5]\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])$"
# Créer un objet personnalisé
[PSCustomObject]@{Name='Guillaume';Age=25}
[PSObject]@{Name='Guillaume';Age=25}
# Equivalent de :
New-Object PSObject -property @{Name='Guillaume';Age=25}
# Définir une durée (days, hours, minutes, seconds)
$duree = [TimeSpan]::New(2, 10, 30, 40)
# Equivalent de :
new-timespan -Days 2 -Hours 10 -Minutes 30 -Seconds 40
# Convertir en date
[DateTime]::Parse('2021-10-12')
[DateTime]::Parse('12-10-2021')
[DateTime]::Parse('10-12-2021')
[DateTime]::Parse('10-12-2021',(get-culture))
[DateTime]::Parse('10-12-2021',[cultureinfo]::GetCultureInfo('en-us'))
[DateTime]::Parse('10-12-2021').ToString('yyyy_MM_dd')
[DateTime]::Parse('10-12-2021').AddDays(8)
[DateTime]::Parse('10-12-2021').AddDays(5).AddMonths(-3)
[DateTime]::now
## WMI
([WMICLASS]'Win32_Process').create("notepad.exe")
# Equivalent
(Get-WmiObject Win32_Process -List).create("notepad.exe")
# ou
Get-CimClass -ClassName Win32_Process |
Invoke-CimMethod -MethodName create -Arguments @{CommandLine=’notepad.exe’}
# Requête WMI pour afficher le processus avec le PID 0 :
[Wmi]"Win32_Process.Handle=0"
# Requête à distance :
[WmiClass]"\\ordinateur_distant\root\cimv2:Win32_Process"
# Utilisation WQL (WMI Query Language) :
([WmiSearcher]"SELECT * FROM Win32_Process").Get()
# Créer un type accelerator
$Accelerateur = [PowerShell].Assembly.GetType("System.Management.Automation.TypeAccelerators")
# Ajouter un type accelerator
$Accelerateur::Add('resolve','System.Net.dns')
# Utiliser le type accelerator
[resolve]::GetHostAddresses('www.google.fr')

Information et liste des types accelerators : 
https://docs.microsoft.com/fr-fr/powershell/module/microsoft.powershell.core/about/about_type_accelerators?view=powershell-7.1
Ou
https://gist.github.com/atifaziz/3074f15e816cf3566c0600dd6cdccf17

Liens en relation