Использование PowerShell для выполнения удаленного сценария, который вызывает командный файл - PullRequest
0 голосов
/ 18 апреля 2019

У меня проблема с запуском командного файла, расположенного на удаленном сервере.

У меня есть пакетный файл, расположенный на удаленном сервере, который я хочу запустить и запускающий автоматический тест Selenium. Для простоты, скажем, имя моего командного файла mybatch.bat

У меня есть следующий код в скрипте Powershell, расположенный на сервере:

$BatchFile = "mybatch.bat"

Start-Process -FilePath $BatchFile -Wait  -Verb RunAs 

Если я запускаю этот сценарий PowerShell локально на сервере в ISE, то он работает нормально и запускает тест на селен, выполнение которого занимает пару минут.

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

У меня есть скрипт PowerShell, расположенный на другом сервере, который имеет следующий сегмент кода. Предположим, что все переменные сеанса имеют правильный набор информации:

$CMD = "D:\mybatch.bat"

$TargetSession = New-PSSession -ComputerName $FullComputerName -Credential $myCreds -ConfigurationName RemoteExecution

$command = "powershell.exe -File $CMD -Wait"
Invoke-Command -Session $TargetSession -ScriptBlock { $command }

Когда этот скрипт выполняется, он подключается к удаленному компьютеру и создает удаленный сеанс. Похоже, он запускает пакетный файл, потому что PowerShell не дает мне ошибки. Но он не ждет полных 3 или 4 минут до завершения теста Selenium. Кажется, что это просто время ожидания. Кроме того, если я вошел на другую машину, я не вижу запущенного веб-теста Selenium. На удаленном сервере не создаются файлы журнала Selenium или файлы результатов, как и следовало ожидать.

Мне было интересно, что я могу делать не так с моим кодом.

Кроме того, кажется, что сервер всегда возвращает выходные данные эха пакетного файла на мою локальную машину. Я вижу эти случайно мигающий белый экран на ISE, который похож на вывод из пакетного файла

Ответы [ 2 ]

1 голос
/ 18 апреля 2019
$command = "powershell.exe -File $CMD -Wait"
Invoke-Command -Session $TargetSession -ScriptBlock { $command }

С указанным кодом есть 2 проблемы:

  • $command внутри блока скрипта и $command вне блока скрипта - это разные переменные из-за разных областей действия.Таким образом, переменная внутри блока скриптов не определена, и блок скриптов просто отобразит значение emtpy.

  • Даже если $command не было неопределенным, блок скриптов все равно будет просто отображать свое значение, так какэто определено как строка.PowerShell не выполняет строки, если вы не используете что-то вроде Invoke-Expression (, которое вы не должны ).

Это должно делать то, что вы хотите:

$CMD = "D:\mybatch.bat"

$TargetSession = New-PSSession -ComputerName $FullComputerName -Credential $myCreds -ConfigurationName RemoteExecution  

Invoke-Command -Session $TargetSession -ScriptBlock { & $using:CMD }
0 голосов
/ 28 апреля 2019

Если вы хотите запустить файл bat с другого компьютера с помощью PowerShell Remote Session, просто введите dot , затем введите пробел и введите точный путь к файлу bat, расположенному на этом удаленном компьютере.

Пример

Invoke-Command -ComputerName RemoteComputerName -Credential $credential -ScriptBlock {. "D:\Temp\Install_Something.bat"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...