สำคัญ:
เราได้รับการใช้ฟังก์ชั่นตามที่ระบุไว้ข้างต้นโดยแอลพีจี
อย่างไรก็ตามสิ่งนี้มีจุดบกพร่องที่คุณอาจพบเมื่อคุณเริ่มกระบวนการที่สร้างผลลัพธ์จำนวนมาก ด้วยเหตุนี้คุณอาจต้องหยุดชะงักเมื่อใช้ฟังก์ชันนี้ ใช้เวอร์ชันดัดแปลงด้านล่างแทน:
Function Execute-Command ($commandTitle, $commandPath, $commandArguments)
{
Try {
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = $commandPath
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $commandArguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
[pscustomobject]@{
commandTitle = $commandTitle
stdout = $p.StandardOutput.ReadToEnd()
stderr = $p.StandardError.ReadToEnd()
ExitCode = $p.ExitCode
}
$p.WaitForExit()
}
Catch {
exit
}
}
สามารถดูข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ได้ที่ MSDN :
เงื่อนไขการหยุดชะงักอาจส่งผลหากกระบวนการหลักเรียกใช้ p.WaitForExit ก่อน p.StandardError.ReadToEnd และกระบวนการชายด์เขียนข้อความเพียงพอที่จะเติมเต็มสตรีมที่เปลี่ยนทิศทาง กระบวนการหลักจะรออย่างไม่มีกำหนดเพื่อให้กระบวนการลูกจบการทำงาน กระบวนการย่อยจะรออย่างไม่มีกำหนดเพื่อให้พาเรนต์อ่านจากสตรีม StandardError แบบเต็ม
$process= ping localhost
# จะบันทึกผลลัพธ์ในตัวแปรกระบวนการ