8
votes

PowerShell - Définir un alias pour l'assemblage chargé

J'utilise ce code pour charger un ensemble .NET EM> à PowerShell:

[System.Reflection.Assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") | out-null 
[System.Windows.Forms.MessageBox]::Show("Hello world")


0 commentaires

4 Réponses :


5
votes

Bien que vous ne puissiez pas créer une sorte d'alias d'espace de noms en soi, vous pouvez utiliser le truc suivant (pris du livre de recettes PowerShell de Lee Holmes):

[Windows.Forms.MessageBox]::Show("Hello World!")


3 commentaires

Je ne savais pas que le système soit impliqué. Merci!


@Kleinux: Cela fonctionne pour faire référence à des types, c'est pourquoi vous pouvez écrire [datetime] au lieu de [system.datetime] mais cela ne fonctionnera pas pour charger un assemblage (c'est-à-dire que type d'ajout -assembly windows.Forms ne fonctionnera pas).


En fait, "système" est pas implicite - il ne fait qu'une partie du chemin de recherche. Citation de "Windows PowerShell in Action": "Type Résolution - Lorsque PowerShell résout un nom de type, il vérifie d'abord la table d'alias de type nom de type; alors il vérifie si un type existe dont le nom complet correspond à la chaîne spécifiée. Finalement, il se répète Le type avec le système. Et vérifie si un type existe qui correspond à la nouvelle chaîne. Cela signifie que des choses qui se trouvent dans l'espace de noms système ressemblent à elles pourraient être aliasées. " Il y a plus que l'espace ici est limité.



14
votes

Vous pouvez stocker le type de variable et utiliser la variable xxx pré>

et dans ce cas, vous pouvez charger l'ensemble comme suit: p>

Add-Type –assembly system.windows.forms


0 commentaires

1
votes

Utilisation de Réponse de Joey Vous pouvez utiliser cette fonction pour définir "Alias" sur les assemblages. Il attribue fondamentalement un assemblage à une fonction avec le nom de l'alias donné que vous souhaitez. XXX PRE>

E.G. Si vous souhaitez affecter System.Windows.Forms à Worms, vous appelleriez la fonction principale que P>

[Windows.Forms.MessageBox]::Show("Hello World!")


0 commentaires

1
votes

Vous pouvez ajouter un accélérateur de type PowerShell (alias pour type): xxx pré>

Plus de détails peut être trouvé ici et ici . p>

avec PowerShell 5 Vous pouvez également importer des espaces de noms: P>

using namespace System.Windows.Forms
[MessageBox]::Show("Hello world")


0 commentaires