Mengapa PsExec hang setelah berhasil menjalankan skrip PowerShell?

12

Scriptnya cukup lurus ke depan. Cukup mencoba untuk memulai banyak layanan windows. Eksekusi secara lokal berfungsi dengan baik ketika berada di mesin target. Script ini benar-benar mengeksekusi juga ketika dilakukan melalui PsExec, itu tidak pernah kembali sampai saya menekan tombol "enter" pada prompt CMD saya. Ini adalah masalah, karena ini dipanggil dari TeamCity, dan itu membuat Agen menunggu PsExec untuk kembali.

Saya sudah mencoba yang berikut ini:

  • Menambahkan exitdan exit 0di akhir skrip Powershell
  • Menambahkan a < NULke akhir panggilan PsExec, per jawaban dalam pertanyaan SF ini
  • Menambahkan >pengalihan stdout

Inilah bagaimana saya sebenarnya memanggil psexec:

psexec \\target -u domain\username -p password powershell c:\path\script.ps1

Tidak peduli apa yang saya lakukan, itu hang sampai saya yang secara lokal pada cmd prompt. Setelah saya menekan enter, saya menerima pesan:

powershell exited on target with error code 0.
Mat
sumber

Jawaban:

11

Ternyata ini adalah masalah umum. Temukan solusinya di sini . Pada dasarnya, jika Anda mem-pipe beberapa data pada stdin dengan cmd, ia akan kembali dengan benar setelah eksekusi (karena dijalankan melalui cmd, bukan PowerShell).

Contoh:

psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
Mat
sumber
apakah ini ditetapkan sebagai Baris Perintah - Skrip Khusus atau Baris Perintah - Dapat Dieksekusi (dalam TeamCity)?
Wojtek Turowicz
OK Ive mengaturnya sebagai Executable dan itu membantu. Terima kasih sobat, saya telah menghabiskan 1 hari mendiagnosisnya. Sebarkan berita!
Wojtek Turowicz
Setelah sehari masalahnya kembali ...
Wojtek Turowicz
11

Saya tahu jawabannya datang terlambat pasti sudah dipecahkan, Jika tidak mungkin berguna bagi pengunjung masa depan.

STDIN harus diarahkan kembali ke dalam perintah eksekusi powershell agar dapat datang dari hang (Here it wait in STDIN). untuk dapat melakukan ini, gunakan -inputformat none

powershell -inputformat none -File powershell_script.ps1 akan bekerja.

Periksa - https://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected

Venfah Nazir
sumber
Ini tidak hanya berfungsi, tetapi juga menjelaskan mengapa jawaban yang diterima berfungsi. Terima kasih!
jpaugh
5
psexec \\target -u domain\username -p password -d powershell c:\path\script.ps1

Juga memperbaiki masalah.

The -dbendera untuk PsExec seperti "run dan keluar" dalam cara yang non-interaktif:

-d Jangan menunggu aplikasi untuk berakhir.

Hanya digunakan untuk aplikasi non-interaktif.

riogezz
sumber
0

Powershell tidak keluar. Coba baris perintah ini

Powershell -command script.ps1
uSlackr
sumber
0

Saya sedang menjalankan psexecdengan skrip VBS dan solusi yang ditandai sebagai yang terbaik (EX:) psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"hanya bekerja untuk saya selama setiap 3 atau lebih dijalankan. Saya terus menggali dan menemukan deskripsi masing-masing saklar

Saya memutuskan untuk mencoba "-s" dan apa yang berhasil bagi saya setiap saat Berikut adalah contoh saya:

call C:\psexec.exe %SERVER_NAME% -u %USERNAME% -p %PASSWORD% -h -s cscript %pathTomyVBSscript%
Thomas
sumber