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" }’