2009-03-25 26 views
6

¿Qué se entiende conceptos tales como Class, Interface, Mixin en PowerShell? ¿Es compatible con OOP? Si es así, ¿dónde puedo leer sobre esto?¿Soporta PowerShell OOP?

Respuesta

9

Se pueden definir nuevos tipos de PowerShell v2.0 usando el cmdlet Add-Type:

Descripción detallada

El cmdlet Add-Type le permite definir una clase de .NET en la sesión de Windows PowerShell . A continuación, puede crear instancias de objetos (utilizando el cmdlet New-Object) y usar los objetos, tal como lo haría con cualquier .NET ob ject. Si agrega un comando Agregar-Tipo a su perfil de Windows PowerShell, la clase estará disponible en todas las sesiones de Windows PowerShell.

Puede especificar el tipo especificando un conjunto existente o archivos de código fuente, o puede especificar el código fuente en línea o guardarlo en una variable. Incluso puede especificar solo un método y Add-Type definirá y generará la clase. Puede utilizar esta función para realizar llamadas de Invocación de plataforma (P/Invocar) a funciones no administradas en Windows PowerShell. Si especifica el código fuente, Add-Type compila el código de fuente especificado de y genera un conjunto en memoria que contiene los nuevos tipos de .NET.

Puede usar los parámetros de Add-Type para especificar un idioma y compilador alternativos (CSharp es el valor predeterminado), opciones de compilación, dependencias de conjunto, el espacio de nombres de clase y los nombres del tipo y el ensamblado resultante .

help Add-Type para obtener más información.

También, ver:

0

Las ofertas de tuberías PowerShell con objetos, no sólo un texto corriente A una tubería de Unix hace. Todas las variables son también instancias de objetos. Estos son todos los objetos .NET, por cierto.

Aquí es parte de la salida de un comando "ls" canaliza al cmdlet Get-Member:

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-Member muestra los miembros del objeto se canaliza a ella. Puede ver que estos son los miembros reales de la clase System.IO.DirectoryInfo.

7

PowerShell es más un lenguaje de usuario de OOP. Puede utilizar la mayoría de .NET Framework, pero no admite de forma nativa la creación de interfaces, clases y ciertamente no mixins. .NET, que es el sistema de tipos de PowerShell, no admite mixins. PowerShell admite la adición dinámica de propiedades y métodos a un objeto existente a través del cmdlet Add-Member.

Add-Type es útil pero si tiene que escapar a C# o VB para definir una clase o clase que implementa una interfaz particular, no consideraría que la primera clase admite la creación de clases/interfaces.

Si está buscando material de aprendizaje gratuito, consulte Effective Windows PowerShell.

+0

Buena respuesta, y muy buen libro. ¡Gracias por los dos! –

-1

La versión 5 de Powershell parece ser compatible con algunos de los principales OOP.

todo el crédito va a este individuo: https://xainey.github.io/2016/powershell-classes-and-concepts/

Ejemplo de una clase:

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

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

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

Ejemplo de una clase abstracta:

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 enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: [agregue contexto alrededor del enlace] (// meta.stackexchange.com/a/8259) para que los demás usuarios tengan una idea de lo que es y por qué está allí, luego cita la parte más relevante de la página a la que estás enlazando en caso de que la página objetivo no esté disponible. [Las respuestas que son poco más que un enlace se pueden eliminar.] (// stackoverflow.com/help/deleted-answers) – Simon