Créer des raccourcis de type (Type accelerators) en powershell

Salut,

Un petit article en cette matinée ensoleillée pour vous montrer la puissance de Powershell. Vous connaissez les types .NET ?  Et bien vous allez pouvoir créer vos raccourcis de type dans powershell et jouer avec :). Des personnes (bien plus malines que moi) ont décompilé Powsershell pour nous et on déniché cette peteite classe

internal static class TypeAccelerators
{
// Fields
private static Dictionary allTypeAccelerators;
internal static Dictionary builtinTypeAccelerators;
internal static Dictionary userTypeAccelerators;

// Methods
static TypeAccelerators();
public static void Add(string typeName, Type type);
internal static void FillCache(Dictionary cache);
internal static string FindBuiltinAccelerator(Type type);
public static bool Remove(string typeName);

// Properties
public static Dictionary Get { get; }
}

 

On notera la présence de 2 méthodes publiques “Add & Remove” qui vont nous permettre d’ajouter et/ou supprimer des accelerators .NET.

Powershell étant un language relativement flexible, il est possible d’aller titiller grâve à l’utilisation de la méthode gettype() pour invoquer des méthodes publiques.

premièrement il s’agit de créer une référence vers le type

$AcceleratorType = [type]::gettype('System.Management.Automation.TypeAccelerators')

Deuxièmement, on ajouter notre accélérateur “maison”

$AcceleratorType::Add('Raccourci',$AcceleratorType)

On retourne toute la liste des raccourcis déinis

[Raccourci]::get

 

Il esxiste déjà alias déjà présent dans Powershell v2 donc ^^

Pour rajouter des raccourcis perso il suffira d’utiliser la commande suivante donc

[Raccourci]::add([nom], [type])

Pour le type vous pourrez facilement trouver des listes de type en fouillant le msdn ici ou encore mieux par , pour le nom de votre raccourci… je vous laisse choix (et me sortez pas ficelle….)

La puissance de ces raccourcis est prouvée lors de la validation d’un set d’argument ou [ipaddress] viendra valider qu’une ip est correcte sans avoir à rajouter de contrôles à base d’expression régulière. Où bien d’autres choses à inventer encore!

Pour supprimer un raccourci perso, on pourra utiliser cette commande:

[Raccourci]::remove([nom])

Voili voilou, évidement si vous avez des remarques…

PS: Un script interessant ici.