На этот вопрос уже есть ответ здесь:
У меня есть файл CMD, из которого я должен запустить сценарий Powershell, передав имя пользователя и пароль: т.е. : PowerShell -File "% 1" -Computer "% 2" -Username "% 3" -Password "% 4". Есть ли способ отправить пароль SecureString из CMD в сценарий PowerShell?
Позвольте мне добавить еще несколько моментов, чтобы прояснить мое затруднительное положение: Поэтому всякий раз, когда я выполняю этот CMD-файл, содержащий указанную выше команду Powershell, я передаю значения для всех параметров (от% 1% до% 4 %) в командной строке. Теперь, когда я передаю эти аргументы, они передаются в виде открытого текста, и все регистрируется в Мониторе событий с идентификатором 4688 с включенным расширенным аудитом. Чего я хочу. - пароль, который в этом случае не должен отображаться.
Нет. SecureString - это конструкция Powershell, которая не имеет смысла в устаревшей среде cmd / batch.
Если вы не хотите, чтобы пароль был видимым, вам нужно найти другой способ передачи, чем непосредственно в команде (что, вероятно, означает изменение вашего сценария Powershell на , но не на , принимающий параметр пароля в виде обычного текста).
Наиболее распространенная вещь, которую я видел, - это экспорт объекта PSCredential
в файл с использованием Export-CliXml
, а затем импортировать его в переменную перед вызовом функции сценария (через Import-CliXml
) и передать переменную функции. Предостережение к этому подходу заключается в том, что экспортированный файл не переносится. Шифрование в XML привязано к и пользователю и машине, которая выполнила экспорт.
Изменить: Вот как вы можете изменить свой сценарий CMD, чтобы приспособиться к передаче PSCredential. Я предполагаю здесь относительные пути, чтобы все было короче.
Перед запуском сценария вам необходимо экспортировать учетные данные в файл.
# interactively prompt for the credential
$cred = get-credential
# export the credential object to a file
$cred | Export-Clixml .\mycred.xml
Теперь в сценарии CMD вы в основном меняете способ использования Powershell при вызове -Файл
для использования -Команда
, чтобы вы могли импортировать файл учетных данных обратно в переменную перед передачей его скрипту.
powershell.exe -C "$cred = Import-Clixml .\mycred.xml; .\%1 -Computer %2 -Credential $cred"