Apakah ada bug dalam Start-Process
perintah PowerShell saat mengakses properti StandardError
dan StandardOutput
?
Jika saya menjalankan perintah berikut, saya tidak mendapatkan output:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait
$process.StandardOutput
$process.StandardError
Tetapi jika saya mengarahkan output ke file, saya mendapatkan hasil yang diharapkan:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt
powershell
start-process
jzbruno.dll
sumber
sumber
$process= ping localhost
# akan menyimpan output dalam variabel proses.Jawaban:
Begitulah cara
Start-Process
dirancang untuk beberapa alasan. Berikut cara mendapatkannya tanpa mengirim ke file:sumber
Dalam kode yang diberikan dalam pertanyaan, saya pikir membaca properti ExitCode dari variabel inisiasi harus berfungsi.
Perhatikan bahwa (seperti dalam contoh Anda) Anda perlu menambahkan parameter
-PassThru
dan-Wait
(ini membuat saya bingung untuk sementara waktu).sumber
-NoNewWindow
dengan-Verb runAs
Saya juga mengalami masalah ini dan akhirnya menggunakan kode Andy untuk membuat fungsi untuk membersihkan berbagai hal ketika banyak perintah perlu dijalankan.
Ini akan mengembalikan kode stderr, stdout, dan keluar sebagai objek. Satu hal yang perlu diperhatikan: fungsi tidak akan menerima
.\
di jalur; jalur lengkap harus digunakan.Berikut cara menggunakannya:
sumber
PENTING:
Kami telah menggunakan fungsi seperti yang disediakan di atas oleh LPG .
Namun, ini mengandung bug yang mungkin Anda temui ketika Anda memulai proses yang menghasilkan banyak output. Karena itu, Anda mungkin menemui jalan buntu saat menggunakan fungsi ini. Alih-alih gunakan versi yang diadaptasi di bawah ini:
Informasi lebih lanjut tentang masalah ini dapat ditemukan di MSDN :
sumber
Saya benar-benar kesulitan dengan contoh-contoh dari Andy Arismendi dan dari LPG . Anda harus selalu menggunakan:
sebelum menelepon
Contoh lengkapnya adalah:
sumber
Berikut adalah versi fungsi saya yang mengembalikan System.Diagnostics.Process standar dengan 3 properti baru
sumber
Berikut cara kludgy untuk mendapatkan output dari proses PowerShell lain:
sumber