Especificar los parámetros ComputerName y Credencial
Cuando se crean secuencias de comandos personalizadas, se especifica el tipo de destino en los metadatos de la secuencia de comandos. Tenga en cuenta el tipo de destino cuando escriba la secuencia de comandos. Lo primero a tener en cuenta cuando se escribe la secuencia de comandos es si debe incluir los parámetros ComputerName y Credencial en los comandos. El entorno de ITScripts proporciona el nombre del equipo en la variable ST_ComputerName y la credencial para ese equipo en la variable ST_Credential. Por ejemplo, cuando se escribe una secuencia de comandos con un tipo de destino "Cualquiera", se puede especificar este comando:
Get-WmiObject win32_Share -ComputerName $ST_ComputerName -Credential $ST_Credential
No obstante, este comando fallará si se ejecuta en un equipo local con el error siguiente:
Get-WmiObject : las credenciales de usuario no se pueden usar para conexiones locales
En otras palabras, este comando funcionará si el tipo de destino es "Cualquiera" y el equipo de destino no está en la consola pero fallará en los siguientes casos:
- El tipo de destino es "Consola"
- El tipo de destino es "WinRM remoto"
- El tipo de destino es "Cualquiera" y el destino es el equipo de la consola
Para tener en cuenta estos casos, es posible que la secuencia de comandos deba probar si utiliza la función remota o si el destino es el equipo de la consola. Para simplificar la creación de secuencias de comandos, ITScripts proporciona dos funciones: ST-ComputerAndCredential y ST-SubCC.
ST-ComputerAndCredential
Esta función devuelve una cadena que contiene la cadena adecuada para usar el
Los parámetros -ComputerName y -Credential basados en el tipo de secuencia de comandos, independientemente de que se ejecute en la consola y de si las credenciales se proporcionaron para el equipo. Devolverá una de estas cadenas:
“-ComputerName $ST_ComputerName –Credential $ST_Credential”
“-ComputerName $ST_ComputerName”
“”
Puede utilizar esto en su comando de secuencia sin preocuparse por el entorno en el que la ejecute. Por ejemplo:
$cc = ST-ComputerAndCredential
$shares = Invoke-Expression "Get-WmiObject win32_Share $cc"
Invoke-Expression se usa para sustituir el valor $cc antes de ejecutar un comando. El problema con esta construcción es que debe recordar escapar los caracteres especiales del comando. Por ejemplo, los caracteres “$” y comillas se deben escapar en el comando siguiente:
$ST_CC = ST-ComputerAndCredential
$registryObject = Invoke-Expression "Get-WmiObject -list
-namespace root\default $ST_CC |
where-object { `$_.name -eq `"StdRegProv`" }"
La función siguiente facilita todavía más esto.
ST-SubCC
Esta función combina los dos comandos que se muestran en el ejemplo anterior. La primera vez que se invoca, pone el resultado de ST-ComputerAndCredential en una variable de PowerShell denominado ST_CC. A continuación, pasa el comando resultante a Invoke-Expression. Lo que hay que recordar cuando se usa ST_SubCC es colocar el comando entre comillas sencillas, no dobles. Los ejemplo anteriores serían:
$shares = ST-SubCC ‘Get-WmiObject win32_Share $ST_CC’
$registryObject = ST-SubCC ‘Get-WmiObject -list
-namespace root\default $ST_CC |
where-object { $_.name -eq "StdRegProv" }’