Powershell - Как вызвать командлет неинтерактивным способом в скрипте Powershell? - PullRequest
2 голосов
/ 13 июля 2011

В моем скрипте powershell я вызываю командлет (скажем, «Connect-Database»).Если командлету нужен дополнительный параметр, он предлагает пользователю ввести эти значения (скажем, «Connect-Database» не может получить учетные данные из реестра, поэтому он запрашивает «Имя пользователя» «пароль» на консоли Powershell и ожидает, что пользователь предоставит это значение).значение).

Я посмотрел код командлета Powershell.Я обнаружил, что он использует «CommandInvocationIntrinsics» для запроса пользователя (используя «NewScriptBlock», а затем «Invoke» метод «CommandInvocationIntrinsics»).

Поскольку я вызываю эти командлеты из сценария Powershell, я хочу, чтобывсякий раз, когда такая подсказка произошла, она будет подавлена, и будет выдано исключение.

Код выглядит примерно так -

try
{
    $db = Connect-Database <databasename>
    #if username / password is prompted, it should be converted into error. But it should not be shown in powershell console.

    if($Error.Count > 0)
    {
        throw $Error[0]
    }
}
catch
{
    #do something
}

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Мой способ сделать это - сначала перечислить обязательные параметры, а затем инициализировать их с помощью $ null vars.Таким образом, больше нет взаимодействия и выдается ошибка.

0 голосов
/ 19 июля 2011

Простое решение, не подсказывайте. Я чувствую, что вы должны либо всегда запрашивать (используя обязательные параметры), либо никогда не запрашивать во время выполнения вашей команды. Если у вас недостаточно информации, выведите ошибку. Если ваша команда используется в интерактивном режиме, пользователь может выполнить повторно с правильной информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...