ÖNEMLİ:
Yukarıda LPG tarafından sağlanan işlevi kullanıyoruz .
Ancak bu, çok fazla çıktı üreten bir işlemi başlattığınızda karşılaşabileceğiniz bir hatayı içerir. Bu nedenle, bu işlevi kullanırken bir kilitlenmeyle karşılaşabilirsiniz. Bunun yerine aşağıdaki uyarlanmış sürümü kullanın:
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
}
}
Bu sorunla ilgili daha fazla bilgi MSDN'de bulunabilir :
Üst süreç p.StandardError.ReadToEnd'den önce p.WaitForExit'i çağırırsa ve alt süreç yeniden yönlendirilen akışı doldurmak için yeterli metin yazarsa, bir kilitlenme durumu oluşabilir. Üst süreç, alt sürecin çıkması için süresiz olarak bekler. Alt süreç, ebeveynin tam StandardError akışından okuması için süresiz olarak bekler.
$process= ping localhost
# çıktıyı proses değişkenine kaydeder.