Использование параметров ComputerName и Credential
Во время создания особых сценариев вы должны указать целевой тип в метаданных сценария. Помните этот целевой тип при написании сценария. Во время создания сценария в первую очередь следует учитывать, нужно ли включить в команды параметры ComputerName и Credential. Среда ITScripts предоставляет имя компьютера в переменной ST_ComputerName и учетные данные для этого компьютера в переменной ST_Credential. Например, во время написания сценария с целевым типом "Любое" вы можете указать следующую команду:
Get-WmiObject win32_Share -ComputerName $ST_ComputerName -Credential $ST_Credential
Однако эта команда завершится ошибкой, если будет выполнена на локальном компьютере:
Get-WmiObject : Учетные данные пользователя не могут использоваться для локальных подключений
Иными словами, эта команда будет работать, если целевой тип - "Любое", а целевой компьютер не консоль, но завершится ошибкой в следующих случаях:
- Целевой тип = ‘Консоль’
- Целевой тип - ‘Удаленное подключение WinRM’
- Целевой тип - ‘Любое’ и цель - это компьютер консоли
Чтобы принять это во внимание, для вашего сценария может потребоваться проверка, - использует ли он удаленное подключение или целью является компьютер консоли. Для упрощения создания сценария в ITScripts представлены две функции: ST-ComputerAndCredential и ST-SubCC.
ST-ComputerAndCredential
Эта функция возвращает строку, содержащую соответствующую строку для использования в
параметрах -ComputerName и -Credential, что зависит от типа сценария, а именно, выполняется ли он на консоли и были ли указаны учетные данные для компьютера. Она возвратит одну из следующих строк:
“-ComputerName $ST_ComputerName –Credential $ST_Credential”
“-ComputerName $ST_ComputerName”
“”
Вы можете использовать это в своей команде сценария, не заботясь о среде, в которой вы осуществляете запуск. Пример:
$cc = ST-ComputerAndCredential
$shares = Invoke-Expression "Get-WmiObject win32_Share $cc"
Invoke-Expression - используется для замены значения $cc перед выполнением команды. Проблема с этой конструкцией состоит в том, что нельзя забывать исключать специальные символы в команде. Например, символы "$" и кавычек должны быть исключены в следующей команде:
$ST_CC = ST-ComputerAndCredential
$registryObject = Invoke-Expression "Get-WmiObject -list
-namespace root\default $ST_CC |
where-object { `$_.name -eq `"StdRegProv`" }"
Следующая функция упрощает это.
ST-SubCC
Эта функция объединяет две, представленные в предыдущем примере, команды. При первом вызове она помещает результат ST-ComputerAndCredential в переменную PowerShell с именем ST_CC. Затем она пересылает полученную команду в Invoke-Expression. Во время использования ST_SubCC следует помнить, что команду нужно помещать в одинарные кавычки, а не в двойные. Предыдущие примеры:
$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" }’