about_Methods

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TEMA

about_methods

DESCRIPCIÓN BREVE

Describe cómo usar métodos para realizar acciones en objetos en Windows PowerShell.

DESCRIPCIÓN LARGA

Windows PowerShell usa objetos para representar los elementos de los almacenes de datos o el estado del equipo. Por ejemplo, los objetos FileInfo representan los archivos de las unidades del sistema de archivos y los objetos ProcessInfo representan los procesos del equipo.

Los objetos tienen propiedades, que almacenan datos sobre el objeto, y métodos, que le permiten cambiar el objeto.

Un "método" es un conjunto de instrucciones que especifican una acción que puede realizar en el objeto. Por ejemplo, el objeto FileInfo incluye el método CopyTo, que copia el archivo que representa el objeto FileInfo.

Para obtener los métodos de cualquier objeto, use el cmdlet Get-Member. Use la propiedad MemberType con un valor "Method". El comando siguiente obtiene los métodos de los objetos de proceso.

        PS C:\>Get-Process | Get-Member -MemberType Method
       
           TypeName: System.Diagnostics.Process

         Name                      MemberType Definition
         ----                      ---------- ----------
         BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
         BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
         ...
         Kill                      Method     System.Void Kill()
         Refresh                   Method     System.Void Refresh()
         Start                     Method     bool Start()
         ToString                  Method     string ToString()
         WaitForExit               Method     bool WaitForExit(int milliseconds), System.Void WaitForExit()
         WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds), bool WaitForInputIdle()

Para realizar o "invocar" un método de un objeto, escriba un punto (.), el nombre del método y un conjunto de paréntesis "()". Si el método tiene argumentos, coloque los valores de los argumentos entre los paréntesis. Los paréntesis son necesarios en todas las llamadas de método, aunque no haya argumentos.

Por ejemplo, el comando siguiente invoca el método de procesos Kill para finalizar el proceso Bloc de notas en el equipo. Como resultado, se cierra la instancia del Bloc de notas. (El comando Get-Process se encierra entre paréntesis para asegurarse de que se ejecuta antes de invocar el método Kill.

        (Get-Process Notepad).Kill()

Otro proceso muy útil es el método Split para cadenas. El método Split toma un argumento de carácter de delimitador que indica al método dónde dividir la cadena.

        PS C:\>$a = "Try-Catch-Finally"
        PS C:\>$a.Split("-")
        Try
        Catch
        Finally

Como se muestra en los ejemplos anteriores, puede invocar un método en un objeto que se obtiene mediante un comando o un objeto en una variable.

A partir de Windows PowerShell 4.0, se admite la invocación de métodos mediante nombres de método dinámicos.

INFORMACIÓN SOBRE LOS MÉTODOS

Para buscar las definiciones de los métodos de un objeto, vaya al tema de ayuda para el tipo de objeto en MSDN y busque la página de sus métodos. Por ejemplo, la página siguiente describe los métodos de objetos de proceso (System.Diagnostics.Process).

         https://msdn.microsoft.com/library/system.diagnostics.process_methods

Para determinar los argumentos de un método, revise la definición del método, que es como el diagrama de sintaxis de un cmdlet de Windows PowerShell.

Una definición de método puede tener una o varias firmas de método, que son como los conjuntos de parámetros de los cmdlets de Windows PowerShell. Las firmas muestran todos los formatos válidos de comandos para invocar el método.

Por ejemplo, el método CopyTo de la clase FileInfo contiene las siguientes dos firmas de métodos:

        1. CopyTo(String destFileName)
        2. CopyTo(String destFileName, Boolean overwrite)

La primera firma de método toma el nombre del archivo de destino (y una ruta de acceso). En el ejemplo siguiente se usa el primer método CopyTo para copiar el archivo Final.txt en el directorio C:\Bin.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

La segunda firma de método toma un nombre de archivo de destino y un valor booleano que determina si se debe sobrescribir el archivo de destino, si ya existe.

En el ejemplo siguiente se usa el segundo método CopyTo para copiar el archivo Final.txt en el directorio C:\Bin y sobrescribir los archivos existentes.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

MÉTODOS DE OBJETOS Y COLECCIONES ESCALARES

Los métodos de un objeto ("escalar") de un tipo determinado a menudo son diferentes de los métodos de una colección de objetos del mismo tipo.

Por ejemplo, todos los procesos tienen un método Kill, pero una colección de procesos no tiene el método Kill.

A partir de Windows PowerShell 3.0, Windows PowerShell trata de evitar los errores de scripting derivados de los diferentes métodos de objetos y colecciones escalares.

A partir de Windows PowerShell 4.0, se admite el filtrado de colecciones mediante una sintaxis de método.

Si envía una colección, pero solicita un método que solo existe en objetos ("escalares") individuales, Windows invoca el método en todos los objetos de la colección.

Si el método existe en los objetos individuales y en la colección, Windows PowerShell no altera el resultado.

Esta característica también funciona en propiedades de objetos y colecciones escalares. Para más información, consulte about_Properties.

EJEMPLOS

En el siguiente ejemplo se ejecuta el método Kill de objetos de proceso individuales en una colección de objetos de proceso. Este ejemplo solo funciona en Windows PowerShell 3.0 y versiones posteriores de Windows PowerShell.

El primer comando inicia tres instancias del proceso Bloc de notas. El segundo comando usa el comando Get-Process para obtener las tres instancias del proceso Bloc de notas y guardarlas en la variable $p.

        PS C:\>Notepad; Notepad; Notepad
        PS C:\>$p = Get-Process Notepad
        

El tercer comando usa la propiedad Count de todas las colecciones para verificar que hay tres procesos en la variable $p.

        PS C:\>$p.Count
        3

El cuarto comando ejecuta el método Kill en los tres procesos en la variable $p.

Este comando funciona incluso si una colección de procesos no tiene un método Kill.

        PS C:\>$p.Kill()

El quinto comando usa el comando Get-Process para confirmar que ha funcionado el comando Kill.

        PS C:\>Get-Process Notepad
        Get-Process : Cannot find a process with the name "notepad". Verify the process name and call the cmdlet again.
        At line:1 char:12
        + get-process <<<<  notepad
            + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process], ProcessCommandException
            + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Para realizar la misma tarea en Windows PowerShell 2.0, use el cmdlet Foreach-Object para ejecutar el método en todos los objetos de la colección.

        PS C:\>$p | Foreach-Object {$_.Kill()}

VEA TAMBIÉN

about_Objects

about_Properties

Get-Member