4

Я использую PSExec в среде тестового компьютера, чтобы запустить пакет установки приложения, которое будет тестироваться как администратор, а затем запустить тесты как администратор, где это необходимо. Здесь PSExec используется только для части "запустить как", без удаленного выполнения. Звонок выглядит так:

c:\psexec -u Administrator -p adminpassword -w C:\SystemTests C:\SystemTests\run_system_tests.cmd ...

Проблема в том, что Jenkins, наш CI-сервер, фиксирует только логотип PSExec в выводе консоли, но не фактическую распечатку теста:

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\SystemTests\run_system_tests.cmd exited with error code 0.

Запущенный скрипт локально открывает собственное консольное окно и печатает там все. Но он не зарегистрирован в Jenkins, поэтому мы не будем знать, что сделал сценарий и почему что-то не получилось.

Есть ли возможность заставить PSExec печатать вывод запущенной программы на стандартный вывод вместо логотипа, а не открывать окно консоли?

3 ответа3

3

Я обнаружил, что вы можете разделить вывод PsExec с удаленного вывода таким образом ...

psexec \\wxesbbtlkS02 cmd /c C:\test.bat >tmpfile.txt 2>other.txt

таким образом, вы получаете вывод PsExec в файле other.txt , а удаленный - в tmpfile.txt

2

Исследуя почти эту проблему, я наткнулся на эту ветку форума technet.

Соответствующий пост в теме:

сообщение от sysinternals от пользователя bnyffele

На самом деле я обнаружил, что между различными системами нет никакой разницы, но это зависит от того, как вы обращаетесь к удаленной машине:

psexec \\hostA cmd        -> seperate window opens (if command is executed on \\hostA)
psexec \\127.0.0.1 cmd    -> cmd prompt in same window
psexec \\[IP address] cmd -> cmd prompt in same window
psexec \\localhost cmd    -> results in error message about localhost being a duplicate name.
psexec \\hostA.domain.com -> cmd prompt in same window

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

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

Если вы пытаетесь понять, как это сделать, используя системное имя вместо IP-адреса, вы все равно можете заставить его работать, добавив точку в конце имени хоста, как это определено другим пользователем несколькими сообщениями позже в той же теме.

опубликовать сообщение пользователя sysinternals bluechipps

На самом деле я только что обнаружил обходной путь, который почти безболезненный. Все, что вам нужно сделать, это добавить «.» после короткого имени, и он все еще будет функционировать так же, но затем будет правильно выводиться в то же окно cmd! Обратите внимание на различия.


PS C:> psexec \hal ipconfig

PsExec v1.95 - удаленное выполнение процессов
Copyright (C) 2001-2009 Марк Руссинович
Sysinternals - www.sysinternals.com

ipconfig вышел с кодом ошибки 0.
PS C:>


PS C:> psexec \hal. IPCONFIG

PsExec v1.95 - удаленное выполнение процессов
Copyright (C) 2001-2009 Марк Руссинович
Sysinternals - www.sysinternals.com

Конфигурация Windows IP

Ethernet-адаптер Local Area Connection 2:

DNS-суффикс для конкретного подключения. : #####
Link-local IPv6 Address. , , , , : #####
IPv4-адрес. , , , , , , , , , , : #####
Маска подсети . , , , , , , , , , , : #####
Шлюз по умолчанию . , , , , , , , , : #####

ipconfig вышел на hal. с кодом ошибки 0.
PS C:>


0

если вы экранируете символ> с помощью каретки ^, вы можете передать вывод в файл. Увидеть ниже.

c:\psexec -u Администратор -p пароль администратора -w C:\SystemTests C:\SystemTests\run_system_tests.cmd ^> outputfile.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .