Redirect output dari proses dimulai secara lokal dengan PSExec

4

Saya menggunakan PSExec dalam lingkungan mesin uji untuk memulai paket pengaturan aplikasi yang akan diuji sebagai administrator, dan kemudian menjalankan tes sebagai administrator jika diperlukan. PSExec hanya digunakan untuk bagian "jalankan sebagai" di sini, tidak ada eksekusi jarak jauh. Panggilannya terlihat seperti ini:

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

Masalahnya adalah bahwa Jenkins, server CI kami, hanya menangkap logo PSExec di output konsol, tetapi bukan hasil tes yang sebenarnya:

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.

Skrip yang dimulai membuka jendela konsolnya sendiri secara lokal dan mencetak semua yang ada di sana. Tapi itu tidak masuk Jenkins sehingga kita tidak akan tahu apa yang dilakukan skrip dan mengapa semuanya gagal.

Apakah ada opsi untuk membuat PSExec mencetak keluaran program yang dimulai ke stdout, alih-alih logo, dan tidak membuka jendela konsol?

ygoe
sumber
Saya kira Anda sedang mencari output dari file batch "run_system_tests.cmd". Jika demikian, maka mod untuk mengarahkan output ke file log. Beri tahu kami hasilnya atau jika Anda butuh bantuan.
Lizz
Lizz, maksud Anda file batch yang disebut (atau apa pun namanya) perlu mencetak hasilnya ke file sendiri dan file ini kemudian harus terdaftar type filename ) setelah psexec - dan redirection shell tidak dapat digunakan dengan psexec?
ygoe
Saya mungkin salah. Mencoba superuser.com/a/201201/178092 yang menggunakan sintaks berikut: 2 & gt; & amp; 1 | tee test.txt
Lizz
1
tee (jika tersedia untuk Windows) juga umumnya memerlukan pengalihan (yang tampaknya menjadi masalah di sini) dan hanya menambahkan fitur untuk mendapatkan output pada keduanya, tampilan dan file. Saya hanya perlu file, desktop tidak dijaga. // Perbarui: Sebenarnya saya tidak ingin file, tetapi stdout untuk ditangkap ...
ygoe
Lihat halaman Rob Van der Woude yang ditulis dengan indah untuk solusi mengarahkan ulang output batch: www.robvanderwoude.com/redirection.php dan www.robvanderwoude.com/battech_redirection.php
Lizz

Jawaban:

3

Saya telah menemukan bahwa Anda dapat membagi output PsExec dari output jarak jauh dengan cara ini ...

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

sehingga Anda mendapatkan output PsExec di other.txt file, dan remote di tmpfile.txt

SteveC
sumber
2

Meneliti hampir masalah persis ini saya menemukan ini utas forum technet .

Pos yang relevan di utas:

posting di sistem oleh pengguna bnyffele

Saya benar-benar menemukan bahwa tidak ada perbedaan antara berbagai sistem, tetapi itu tergantung pada bagaimana Anda mengatasi mesin jarak jauh:

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

Jadi, sepertinya saya hanya mendapatkan jendela terpisah, ketika saya menjalankan psexec untuk mesin lokal dan saya menggunakan nama host pendek.

Tampaknya jika Anda menentukan alamat IP host lokal sebagai mesin untuk menjalankan perintah, Anda akan mendapatkan hasilnya. Saya mengujinya sendiri, dan walaupun tidak mencetak output standar secara real time, ia mencetak semuanya ke terminal yang sama ketika skrip selesai.

Jika Anda mencoba mencari tahu bagaimana melakukan ini dengan menggunakan nama sistem alih-alih alamat IP Anda masih bisa membuatnya bekerja dengan menambahkan sebuah titik di akhir nama host sebagaimana ditentukan oleh pengguna lain beberapa posting kemudian di utas yang sama.

posting di sistem oleh pengguna cetak biru

Sebenarnya saya baru saja menemukan solusi yang hampir tidak menyakitkan. Yang harus Anda lakukan adalah menambahkan '.' setelah nama pendek dan masih akan berfungsi sama tetapi kemudian akan menampilkan dengan benar ke jendela cmd yang sama! Perhatikan perbedaannya.


PS C: & gt; psexec \ hal ipconfig

PsExec v1.95 - Jalankan proses dari jarak jauh
Hak Cipta (C) 2001-2009 Mark Russinovich
Sysinternals - www.sysinternals.com

ipconfig keluar dengan kode kesalahan 0.
PS C: & gt;


PS C: & gt; psexec \ hal. ipconfig

PsExec v1.95 - Jalankan proses dari jarak jauh
Hak Cipta (C) 2001-2009 Mark Russinovich
Sysinternals - www.sysinternals.com

Konfigurasi Windows IP

Adaptor Ethernet Koneksi Area Lokal 2:

Sufiks DNS khusus sambungan. : #####
Tautan Alamat IPv6-lokal. . . . . : #####
Alamat IPv4. . . . . . . . . . . : #####
Subnetmask . . . . . . . . . . . : #####
Gateway Default. . . . . . . . . : #####

ipconfig keluar pada hal. dengan kode kesalahan 0.
PS C: & gt;


Tuffwer
sumber
0

jika Anda lolos dari & gt; karakter dengan tanda sisipan ^ Anda dapat menyalurkan output ke file. Lihat di bawah.

c: \ psexec -u Administrator -p adminpassword -w C: \ SystemTests C: \ SystemTests \ run_system_tests.cmd ^ & gt; outputfile.txt

IT_AUDITOR_AEric
sumber