Especificando os parâmetros ComputerName e Credential
Ao criar scripts personalizados, você especifica o tipo de alvo nos metadados do script. Mantenha o tipo de alvo em mente ao escrever o script. A principal coisa a ser considerada ao escrever o script é se você deve incluir os parâmetros ComputerName e Credential nos comandos. O ambiente ITScripts fornece o nome do computador na variável ST_ComputerName, e a credencial desse computador na variável ST_Credential. Por exemplo, ao escrever um script com o tipo de alvo "Qualquer", você pode especificar este comando:
Get-WmiObject win32_Share -ComputerName $ST_ComputerName -Credential $ST_Credential
No entanto, se executado na máquina local, o comando falhará com o seguinte erro:
Get-WmiObject: as credenciais do usuário não podem ser usadas para conexões locais
Em outras palavras, este comando funcionará se o tipo de alvo for "Qualquer" e a máquina alvo não for o console, mas falhará nos seguintes casos:
- O tipo de alvo é "Console"
- O tipo de alvo é "Comunicação remota WinRM"
- O tipo de alvo é "Qualquer", e o alvo é o computador do console
Para levar esses casos em consideração, o script talvez precise testar se está sendo usada comunicação remota ou se o alvo é a máquina do console. Para simplificar a criação de scripts, o ITScripts fornece duas funções: ST-ComputerAndCredential e ST-SubCC.
ST-ComputerAndCredential
Esta função retorna a string apropriada a ser usada para
os parâmetros -ComputerName e -Credential, com base o tipo de script, se ele está sendo executado no console e se foram fornecidas credenciais para a máquina. Ele retornará uma destas strings:
“-ComputerName $ST_ComputerName –Credential $ST_Credential”
“-ComputerName $ST_ComputerName”
“”
Você pode usar isso no comando do seu script sem se preocupar com o ambiente em que está executando. Por exemplo:
$cc = ST-ComputerAndCredential
$shares = Invoke-Expression "Get-WmiObject win32_Share $cc"
Invoke-Expression é usado para substituir o valor de $cc antes de executar o comando. O problema com essa construção é que você deve se lembrar de escapar os caracteres especiais no seu comando. Por exemplo, "$" e os caracteres de aspas precisam ser escapados no seguinte comando:
$ST_CC = ST-ComputerAndCredential
$registryObject = Invoke-Expression "Get-WmiObject -list
-namespace root\default $ST_CC |
where-object { `$_.name -eq `"StdRegProv`" }"
A função a seguir torna isso ainda mais simples.
ST-SubCC
Esta função combina os dois comandos mostrados no exemplo anterior. Na primeira vez que é chamada, coloca o resultado de ST-ComputerAndCredential em uma variável do PowerShell chamada ST_CC. Em seguida, passa o comando resultante para Invoke-Expression. Ao usar ST_SubCC, o importante é lembrar de colocar o comando entre aspas simples, não aspas duplas. Os exemplos anteriores ficariam:
$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" }’