Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Descripción breve
Describe cómo usar métodos para realizar acciones en 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 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 su propiedad MemberType con un valor de "Method". El comando siguiente 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 del argumento entre paréntesis. Los paréntesis son necesarios para cada llamada de método, incluso cuando no hay argumentos. Si el método toma varios argumentos, deben estar separados por comas.
Por ejemplo, el siguiente comando 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 combinando las instrucciones anteriores.
(Get-Process Notepad).Kill()
El comando Get-Process se incluye entre paréntesis para asegurarse de que se ejecuta antes de invocar el método Kill. A continuación, se invoca el método Kill en el objeto Process devuelto.
Otro método muy útil es el método Replace de cadenas. El método Replace reemplaza el texto de una cadena. En el ejemplo siguiente, el punto (.) se puede colocar inmediatamente después de la comilla final de la cadena.
'this is rocket science'.Replace('rocket', 'rock')
this is rock science
Como se muestra en los ejemplos anteriores, 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étodo mediante nombres de método dinámico.
Obtener información sobre los métodos
Para buscar definiciones de los métodos de un objeto, vaya al tema de ayuda para el tipo de objeto en MSDN y busque su página de métodos. Por ejemplo, en la página siguiente se describen los métodos de los objetos de proceso System.Diagnostics.Process.
Para determinar los argumentos de un método, revise la definición del método, que es similar al diagrama de sintaxis de un cmdlet de 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 PowerShell. Las firmas muestran todos los formatos válidos de los comandos para invocar el método .
Por ejemplo, el método CopyTo de la clase FileInfo contiene las dos firmas de método siguientes:
CopyTo(String destFileName)
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")
Nota:
A diferencia del argumento de PowerShell modo, 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 expresión no se permiten argumentos de sin comillas (cadenas sin comillas). Puede ver esto en la ruta de diferencia como parámetro, frente a la ruta como argumento. Puede obtener más información sobre los modos de análisis en about_Parsing
La segunda firma del método toma un nombre de archivo de destino y un valor booleano que determina si el archivo de destino debe sobrescribirse, 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 para sobrescribir los archivos existentes.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
Métodos de objetos escalares y colecciones
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 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 ("escalares"), PowerShell 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, 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, consulte 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 del Bloc de notas. El segundo comando utiliza el Get-Process comando para obtener las tres instancias del proceso del Bloc de notas y guardarlas en la $p variable.
Notepad; Notepad; Notepad
$p = Get-Process Notepad
El tercer comando utiliza 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 método Kill.
$p.Kill()
El quinto comando utiliza el comando Get-Process para confirmar que el Kill comando funcionó.
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 colecciones mediante una sintaxis de método. Esto permite el uso de dos métodos nuevos al tratar con colecciones ForEach y Where.
Puede obtener más información sobre estos métodos en about_arrays