Обработка пользовательского ввода во время исполнения - PullRequest
0 голосов
/ 25 марта 2020

Как я могу сделать так, чтобы мой скрипт прослушивал ввод пользователя, когда он работает и выполняет фоновые операции. «Read-host» не делает то, что я хочу, потому что он показывает подсказку и ждет ввода пользователя. Я не хочу ждать, поскольку ввод пользователя не является обязательным. Более того, во время выполнения сценария (сценарий выполняется с длительным циклом) я хочу изменить некоторые параметры, не останавливая сценарий.

Так, например, когда я нажимаю 4 на клавиатуре, сценарий должен выбрать его во время работы и установите переменную Speci c равной "4" и продолжайте обработку с переменной, установленной на это значение.

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

Редактировать: я редактирую пост для некоторых разъяснений. Это не настоящий код, но показывает структуру. Существует вечный l oop, который создает ряд фоновых задач. Если число падает ниже предела, создаются новые фоновые задачи. То, что я хочу, - это возможность изменить $ limit, введя новое значение, пока l oop продолжает работать. L oop должен продолжать работать и не ждать ввода, так как ввод полностью необязателен.

$limit = SOME_VALUE
while($condition)
    { 
      if ($total_number_of_background_tasks < $limit) {
          create new background task }
    }
Continue to do something

1 Ответ

0 голосов
/ 25 марта 2020

Вы можете попробовать вот так: он ждет нажатия клавиши и сохраняет нажатие клавиши в переменной:

while($true){
  $key = [Console]::ReadKey().Key.ToString()
}

Клавиша $ каждый раз перезаписывается, поэтому для добавления нажатий клавиши к ней:

$key = ""
while($true){
  $key += [Console]::Readkey().Key.Tostring()
}

Чтобы сохранить ключи в виде массива:

$key = @()
# Like upper one

Массив можно получить как $ key [индекс начинается с 0]

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