Эквивалент bash «ожидать» в powershell - PullRequest
6 голосов
/ 18 октября 2011

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

Есть идеи?

Спасибо

Ответы [ 3 ]

0 голосов
/ 02 ноября 2016

Вы просто используете программу Expect в своем PowerShell. Оно работает. Powershell - это тоже оболочка, вы можете запускать код, написанный powershell, который вызывает bash-код, который снова вызывает powershell.

Сильфон - это испытание, оно прошло.

It "can work with tcl expect" {
    $bs = @'
    echo "Do you wish to install this program?"
    select yn in "Yes" "No"; do
    case $yn in
        Yes ) echo "install"; break;;
        No ) exit;;
    esac
done
'@

$bsf = New-TemporaryFile
$bs | Set-Content -Path $bsf

$tcls = @'
#!/bin/sh
# exp.tcl \
exec tclsh "$0" ${1+"$@"}

package require Expect
set timeout 100000
spawn {spawn-command}
expect {
    "Enter password: $" {
        exp_send "$password\r"
        exp_continue
    }
    "#\? $" {
            exp_send "1"
    }
    eof {}
    timeout {}
}
'@

$tclf = New-TemporaryFile
$tcls -replace "{spawn-command}",("bash",$bsf -join " ") | Set-Content -Path $tclf
"bash", $tclf -join " " | Invoke-Expression

Remove-Item $bsf
Remove-Item $tclf
}

Позвольте мне объяснить тест.

  1. создать bash-файл, который ожидает ввода.
  2. создать файл tcl, который вызывает bash, созданный на первом шаге.
  3. вызывает программу tcl из powershell, она работает, не будет ждать ввода.
0 голосов
/ 14 ноября 2017

Просто опубликую свое решение, чтобы оно могло кому-то помочь.Я столкнулся с той же проблемой при запуске другого скрипта, который будет запрашивать ответы.Сначала создайте файл «inputFileLocation.txt» с ответами на каждый вопрос в каждой строке по очереди.Затем запустите скрипт в следующем синтаксисе.И это сделает работу.

`cmd.exe /c "script.bat < inputFileLocation.txt"`
0 голосов
/ 08 мая 2014

Я не знаю ни одной нативной возможности точного дублирования.На этот вопрос есть ответ, в котором утверждается, что он может передавать контент процессу или из процесса, поэтому он может работать с тем, что вам нужно.

Как запускать интерактивные команды в другом окне приложения из powershell

Удачи!

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