TEMA
about_methods
DESCRIPCIÓN BREVE
Describe cómo se usan los métodos para realizar acciones en los
objetos de Windows PowerShell.
DESCRIPCIÓN DETALLADA
Windows PowerShell usa colecciones estructuradas de datos, denominadas
objetos, para representar los elementos de los almacenes de datos o
el estado del equipo. Por ejemplo, cuando se obtiene acceso a un
archivo en Windows PowerShell, en realidad, no se trabaja con el
archivo sino con un objeto FileInfo, un tipo de objeto que actúa como
proxy del archivo.
La mayoría de los objetos incluyen métodos. Un método es un
conjunto de instrucciones que especifican una acción determinada
que puede realizar con ese objeto. Por ejemplo, el objeto
FileInfo incluye un método denominado CopyTo, que permite copiar
el archivo representado por el objeto.
Para ver una lista de los métodos y definiciones de método
asociados con un objeto específico, puede usar el cmdlet
Get-Member. No obstante, para usar el cmdlet, el objeto debe
existir ya en alguna forma, ya sea representado mediante una
variable, como un objeto creado al especificar un comando como
argumento del comando Get-Member, o bien, como un objeto pasado a
través de una canalización. Por ejemplo, suponga que se ha
asignado a la variable $a un valor de cadena, lo que significa que la
variable está asociada con un objeto de cadena. Para ver la lista de
métodos del objeto, escriba el siguiente comando en el símbolo del
sistema de Windows PowerShell:
Get-Member -inputobject $a -membertype method
Si desea ver qué métodos y definiciones de método están asociados
con un objeto que se pasa a través de la canalización, debe usar
un comando Get-Member en la canalización, tal y como se muestra en el
siguiente ejemplo:
Get-ChildItem c:\final.txt | Get-Member -membertype method
La manera más común de invocar un método es especificar el nombre
del método a continuación de una referencia de objeto (como una
variable o expresión). Debe separar la referencia de objeto y el
método con un punto. Además, debe usar paréntesis inmediatamente a
continuación del nombre de método para escribir los argumentos que
desee pasar al método.
Si no se pasa ningún argumento en una firma de método, se debe usar un
conjunto de paréntesis vacíos.
Por ejemplo, el siguiente comando usa el método GetType para
devolver el tipo de datos asociado con el objeto de cadena $a:
$a.GetType()
El método GetType devuelve el tipo de datos para cualquier objeto y un
objeto siempre se representa mediante una variable. El tipo del
objeto dependerá del tipo de datos almacenados en esa variable.
En Windows PowerShell, cada acción está asociada con objetos,
tanto si se declara una variable como si se combinan comandos en una
canalización.
Por ello, es posible usar métodos en diversas situaciones. Por
ejemplo, puede usar un método para realizar una acción con el
valor de una propiedad, como se indica en el siguiente comando:
(Get-ChildItem c:\final.txt).name.ToUpper()
En este caso, el objeto en el que se está invocando el método
ToUpper es el objeto de cadena asociado con la propiedad name.
(Observe que el archivo Final.txt debe existir en la raíz de la
unidad C: para que este ejemplo funcione.) La propiedad name es
en realidad una propiedad del objeto FileInfo que el comando
Get-ChildItem devuelve. Esto no solo ilustra la naturaleza orientada a
objetos de Windows PowerShell, sino que también muestra cómo se puede
llamar a métodos en cualquier objeto accesible.
Puede obtener los mismos resultados que en el ejemplo anterior si
usa una variable para almacenar el resultado del comando
Get-ChildItem, tal y como se indica en el siguiente ejemplo:
$a = (Get-ChildItem c:\final.txt).name
$a.ToUpper()
El comando vuelve a usar el método ToUpper del objeto de cadena
asociado con la variable, que contiene el nombre de archivo
devuelto por el comando Get-ChildItem.
En algunos casos, un método requiere un argumento que dirija su
acción. Por ejemplo, el objeto FileInfo incluye el método MoveTo, que
proporciona una forma de mover un archivo de una ubicación a otra.
El método requiere un argumento que especifica la ubicación de destino
del archivo. El siguiente comando indica la forma de incluir ese argumento:
(Get-ChildItem c:\final.txt).MoveTo("c:\techdocs\final.txt")
El comando Get-ChildItem devuelve un objeto FileInfo para el archivo
Final.txt y después usa el método MoveTo de ese objeto para iniciar
la acción y especificar la nueva ubicación del archivo.
Para determinar los argumentos asociados con un método, revise la
definición de método correspondiente. Una definición de método
contiene una o más firmas de método (también denominadas
sobrecargas en Microsoft .NET Framework). Una firma de método
contiene el nombre de un método y cero o más parámetros que el
usuario debe proporcionar al llamar al método. En el cmdlet
Get-Member, cada firma de método queda separada de la firma anterior
mediante una coma. Por ejemplo, el método CopyTo de la clase FileInfo
contiene las dos firmas de método siguientes:
1. CopyTo(String destFileName)
2. CopyTo(String destFileName, Boolean overwrite)
La primera firma de método usa el nombre del archivo de destino
(incluida la ruta de acceso) en el que se va a copiar el archivo
de origen. En el siguiente ejemplo, se usa el primer método
CopyTo para copiar Final.txt en el directorio C:\Bin:
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
Si el archivo ya existe en la ubicación de destino, el método
CopyTo no se ejecutará correctamente y Windows PowerShell
notificará el siguiente error:
Excepción al llamar a "CopyTo" con los argumentos "1": "El archivo
'c:\bin\final.txt' ya existe.".
En la segunda firma de método, se pasa el nombre del archivo de
destino igual que en el primer caso, pero también se pasa un
valor booleano para especificar si se desea que se sobrescriba un
archivo existente del mismo nombre en la ubicación de destino,
tal y como se indica en el siguiente ejemplo:
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
Al pasar el valor booleano, debe usar la variable $True, que Windows
PowerShell crea automáticamente. La variable $True contiene el valor
booleano "true". (Como era de esperar, la variable $False contiene el
valor booleano "false".)
VEA TAMBIÉN
about_Objects
Get-Member