Как запустить PuTTY и Chrome одновременно в файле сценария PowerShell Windows 10? - PullRequest
0 голосов
/ 12 января 2020

У меня есть 10-шаговый процесс, который я использую для отладки своего веб-приложения, который я хотел бы автоматизировать с помощью сценария PowerShell, который выполняет второй шаг до последнего шага, приведенного ниже:

  1. Запустите phpStorm и откройте проект моего веб-приложения,
  2. Запустите PuTTY и A. подключитесь к удаленному веб-серверу с помощью S SH -Tunneling, B. Войдите на удаленный веб-сервер в окно терминала, открытое PuTTY, C. Оставьте окно терминала открытым,
  3. Запустите браузер Chrome и A. Запустите немного javascript, чтобы создать x-debugging cook ie и B. Загрузите мою веб-страницу и позвольте мне выбрать некоторые настройки, которые я хочу использовать, когда эта страница переходит к моему веб-приложению.

Обычно я запускаю phpStorm, используя иконку на рабочем столе, но я хочу использовать скрипт PowerShell, делаю все остальное из шагов. Прямо сейчас, используя два пакетных / cmd-сценария DOS, я могу запустить PuTTY и войти в систему, используя один сценарий, а затем запустить Chrome и загрузить веб-страницу, используя другой сценарий. Оба этих скрипта имеют значки Windows на рабочем столе и работают правильно, когда я щелкаю по ним, но теперь я хотел бы объединить скрипты в один скрипт, который должен иметь возможность запускать PuTTY в фоновом режиме и Chrome в на переднем плане, а когда Chrome закрывается, убейте PuTTY.

Следующий Windows 10 скрипт PowerShell почти работает:

## Add Window's MessageBox framework

Add-Type -AssemblyName PresentationFramework

##
## The next line is supposed to force the MessageBox to float over anything
##  else, but errors, so commented out.
##
## $form.TopMost = $True

try {

  ##
  ## Test the remote server connection, if it isn't able to connect then
  ## throw an exception, but this test doesn't work, so commented out.
  ##

  ##   if ( -not ( Test-Connection -ComputerName 999.999.999.999:9000 -Quiet -Count 1 ) ) {
  ## 
  ##     throw 'Unable to connect with the remote server!'
  ## 
  ##   }
  ##   else {

    ## Start PuTTY in SSH-Tunneling mode as root

    $scriptBlock = {

      C:\PROGRA~1\PuTTY\putty.exe -ssh root@999.999.999.999 -P 9000 -pw pppppppp

    }

    Start-Job -Name 'PuTTY' -ScriptBlock $scriptBlock

    ## Now start Chrome and load web-page

    C:\PROGRA~2\Google\Chrome\Application\Chrome.exe --start-maximized http://www.webpage.com/app.html

    ## Wait until Chrome is closed, then kill PuTTY

    Stop-Process -Name 'PuTTY'

  ##   }

}
catch  {

 $msg = $_

 [System.Windows.MessageBox]::Show( $msg, 'Unable to start PuTTY!', 'OK', 'Error' )

 Write-Error $msg

}

##
## The next line is supposed to unforce the MessageBox from floating over
## anything else, but errors, so commented out.
##

## $form.TopMost = $False

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

  1. Закомментированный оператор if (-not (Test-Connection -ComputerName ... -Quiet -Count 1)) должен проверять, что Соединение может быть установлено с удаленным сервером, но оно не работает.

  2. Команда Start-Job правильно запускает PuTTY в фоновом режиме и не может войти в систему с помощью PowerShell. Путь к исполняемому файлу использует соглашение коротких имен, потому что двойные кавычки вокруг имен с пробелами не работают.

  3. В отличие от PuTTY, Chrome не блокирует скрипт, пока он работает, поэтому фоновый скрипт PuTTY убит. Вам также нужно запустить Chrome с коротким путем к имени.

Кто-нибудь может помочь с этими проблемами?

Спасибо.

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