Compartir a través de


Acerca de los métodos

Descripción breve

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

Descripción larga

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 permiten cambiar el objeto.

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

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

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), ...
WaitForInputIdle          Method     bool WaitForInputIdle(int millisecon...

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 argumento entre paréntesis. Los paréntesis son necesarios para cada llamada al método, incluso cuando no hay ningún argumento. Si el método toma varios argumentos, deben separarse con comas.

Por ejemplo, el comando siguiente invoca el método Kill de procesos para finalizar el proceso del Bloc de notas en el equipo.

$notepad = Get-Process notepad
$notepad.Kill()

Este ejemplo se puede acortar mediante la combinación de las instrucciones anteriores.

(Get-Process Notepad).Kill()

El Get-Process comando se escribe entre paréntesis para asegurarse de que se ejecuta antes de que se invoque el método Kill. KillA continuación, se invoca el método en el Process objeto devuelto.

Otro método muy útil es el Replace método de cadenas. El Replace método reemplaza el texto dentro de una cadena. En el ejemplo siguiente, el punto (.) se puede colocar inmediatamente después de la comilla de cierre de la cadena.

'this is rocket science'.Replace('rocket', 'rock')
this is rock science

Como se muestra en los ejemplos anteriores, se puede invocar un método en un objeto que se obtiene mediante un comando, un objeto de una variable o cualquier cosa que tenga como resultado un objeto (como una cadena entre comillas).

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

Aprender sobre los métodos

Para buscar definiciones de los métodos de un objeto, vaya a tema de ayuda para el tipo de objeto en MSDN y busque su página de métodos. Por ejemplo, en la siguiente página se describen los métodos de Process Objects System. Diagnostics. Process.

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

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

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

    CopyTo(String destFileName)
    CopyTo(String destFileName, Boolean overwrite)

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

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

Nota

A diferencia del modo de argumento de PowerShell, los métodos de objeto se ejecutan en modo de expresión , que es un paso a través de .NET Framework en el que se basa PowerShell. En modo de expresión , no se permiten los argumentos bareword (cadenas sin comillas). Puede verlo en la ruta de acceso de diferencia como parámetro, frente a la ruta de acceso como un argumento. Puede leer más sobre los modos de análisis en about_Parsing

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 CopyTo método para copiar el Final.txt archivo en el C:\Bin Directorio y para sobrescribir los archivos existentes.

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

Métodos de colecciones y objetos escalares

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

Por ejemplo, cada proceso tiene un Kill método, pero una colección de procesos no tiene un método Kill.

A partir de PowerShell 3,0, PowerShell intenta evitar los errores de scripting que se derivan de los diferentes métodos de objetos escalares y colecciones.

Si envía una colección, pero solicita un método que solo existe en objetos únicos ("escalar"), PowerShell invoca el método en cada objeto de la colección.

Si el método existe en los objetos individuales y en la colección, solo se invoca el método de la colección.

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

Ejemplos

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

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

Notepad; Notepad; Notepad
$p = Get-Process Notepad

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

$p.Count
3

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

Este comando funciona aunque una colección de procesos no tenga un Kill método.

$p.Kill()

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

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

Para realizar la misma tarea en PowerShell 2,0, use el Foreach-Object cmdlet para ejecutar el método en cada objeto de la colección.

$p | ForEach-Object {$_.Kill()}

Métodos ForEach y Where

A partir de PowerShell 4,0, se admite el filtrado de recopilación mediante el uso de una sintaxis de método. Esto permite el uso de dos nuevos métodos cuando se trabaja con colecciones ForEach y Where .

Puede obtener más información sobre estos métodos en about_arrays.

Consulte también

about_Objects

about_Properties

Get-Member