2009-03-25 10 views

Répondre

9

Vous pouvez définir de nouveaux types v2.0 PowerShell en utilisant l'applet de commande Add-Type:

Description détaillée

L'applet de commande Add-Type vous permet de définir une classe .NET dans votre session Windows PowerShell . Vous pouvez ensuite instancier des objets (en utilisant la cmdlet New-Object) et utiliser les objets, comme vous le feriez avec n'importe quel objet .NET ob . Si vous ajoutez une commande Add-Type à votre profil Windows PowerShell, la classe sera disponible dans toutes les sessions Windows PowerShell.

Vous pouvez spécifier le type en spécifiant un assembly existant ou des fichiers de code source, ou vous pouvez spécifier le code source en ligne ou enregistré dans une variable. Vous pouvez même spécifier uniquement une méthode et Add-Type définira et générera la classe. Vous pouvez utiliser cette fonctionnalité pour effectuer des appels Platform Invoke (P/Invoke) à des fonctions non gérées dans Windows PowerShell. Si vous spécifiez le code source, Add-Type compile le code source co spécifié et génère un assembly en mémoire qui contient les nouveaux types .NET. Vous pouvez utiliser les paramètres de Add-Type pour spécifier une autre langue et un compilateur (CSharp est la valeur par défaut), les options du compilateur, les dépendances d'assembly, l'espace de nom de classe et les noms du type et l'assembly résultant.

help Add-Type pour plus d'informations.

Aussi, voir:

0

Les offres de pipeline PowerShell avec des objets, pas seulement un flux de texte d'un pipeline Unix fait. Toutes les variables sont également des instances d'objets. Ce sont tous des objets .NET, BTW.

est ici une partie de la sortie d'un « ls » commande canalisée vers l'applet de commande get-membre:

PS C:\Documents and Settings\Administrator.DEV-3DPST1-SWK> ls | get-member 


    TypeName: System.IO.DirectoryInfo 

Name      MemberType  Definition 
----      ----------  ---------- 
Create     Method   System.Void Create(DirectorySecurity directorySecurity), System.Void Create() 
CreateObjRef    Method   System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType) 
CreateSubdirectory  Method   System.IO.DirectoryInfo CreateSubdirectory(String path), System.IO.Director... 
Delete     Method   System.Void Delete(), System.Void Delete(Boolean recursive) 
Equals     Method   System.Boolean Equals(Object obj) 
GetAccessControl   Method   System.Security.AccessControl.DirectorySecurity GetAccessControl(), System.... 
GetDirectories   Method   System.IO.DirectoryInfo[] GetDirectories(String searchPattern), System.IO.D... 
GetFiles     Method   System.IO.FileInfo[] GetFiles(String searchPattern), System.IO.FileInfo[] G... 
GetFileSystemInfos  Method   System.IO.FileSystemInfo[] GetFileSystemInfos(String searchPattern), System... 
GetHashCode    Method   System.Int32 GetHashCode() 
GetLifetimeService  Method   System.Object GetLifetimeService() 
GetObjectData    Method   System.Void GetObjectData(SerializationInfo info, StreamingContext context) 
GetType     Method   System.Type GetType() 
get_Attributes   Method   System.IO.FileAttributes get_Attributes() 
get_CreationTime   Method   System.DateTime get_CreationTime() 

get membres affiche les membres de l'objet que vous conduit à lui. Vous pouvez voir que ce sont les membres réels de la classe System.IO.DirectoryInfo.

7

PowerShell est plus un langage grand public OOP. Il peut utiliser la plupart des .NET Framework mais il ne supporte pas nativement la création d'interfaces, de classes et certainement pas de mixins. .NET, sur lequel repose le système de types de PowerShell, ne prend pas en charge les mixins. PowerShell prend en charge l'ajout dynamique de propriétés et de méthodes à un objet existant via la cmdlet Add-Member. Add-Type est utile mais si vous devez échapper à C# ou à VB pour définir une classe ou une classe qui implémente une interface particulière, je ne considérerais pas que cette première classe supporte la création de classes/interfaces.

Si vous cherchez du matériel d'apprentissage gratuit, consultez Effective Windows PowerShell.

+0

Bonne réponse, et très beau livre. Merci pour les deux! –

-1

La version 5 de Powershell semble soutenir une partie de la POO traditionnelle.

Tout le crédit va à ce type: https://xainey.github.io/2016/powershell-classes-and-concepts/

Exemple d'une classe:

class myColor 
    { 
     [String] $Color 
     [String] $Hex 

     myColor([String] $Color, [String] $Hex) 
     { 
      $this.Color = $Color 
      $this.Hex = $Hex 
     } 

     [String] ToString() 
     { 
      return $this.Color + ":" + $this.Hex 
     } 
    } 

Exemple d'une classe abstraite:

class Foo 
{ 
    Foo() 
    { 
     $type = $this.GetType() 

     if ($type -eq [Foo]) 
     { 
      throw("Class $type must be inherited") 
     } 
    } 

    [string] SayHello() 
    { 
     throw("Must Override Method") 
    } 
} 

class Bar : Foo 
{ 
    Bar() 
    { 

    } 

    [string] SayHello() 
    { 
     return "Hello" 
    } 
} 
+1

Un lien vers une solution est le bienvenu, mais s'il vous plaît assurez-vous que votre réponse est utile sans cela: [ajouter un contexte autour du lien] (// meta.stackexchange.com/a/8259) pour que vos autres utilisateurs aient une idée de ce que c'est et pourquoi c'est là, puis citez la partie la plus pertinente de la page que vous liez au cas où la page cible n'est pas disponible. [Les réponses qui sont un peu plus d'un lien peuvent être supprimées.] (// stackoverflow.com/help/deleted-answers) – Simon

Questions connexes