Использование параметров 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" }’