जरूरी:
हम एलपीजी द्वारा उपरोक्त प्रदान किए गए फ़ंक्शन का उपयोग कर रहे हैं ।
हालाँकि, इसमें एक बग हो सकता है जब आप एक प्रक्रिया शुरू करते हैं जो बहुत अधिक आउटपुट उत्पन्न करता है। इसके कारण आप इस फ़ंक्शन का उपयोग करते समय एक गतिरोध के साथ समाप्त हो सकते हैं। इसके बजाय नीचे दिए गए अनुकूलित संस्करण का उपयोग करें:
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.WaFForExit से पहले p.StandardError.ReadToEnd पर कॉल करती है और बच्चे की प्रक्रिया पुनर्निर्देशित स्ट्रीम को भरने के लिए पर्याप्त पाठ लिखती है। मूल प्रक्रिया बच्चे की प्रक्रिया से बाहर निकलने के लिए अनिश्चित काल तक प्रतीक्षा करेगी। बच्चे की प्रक्रिया पूरी तरह से मानक Standardrr स्ट्रीम से पढ़ने के लिए अनिश्चित काल तक प्रतीक्षा करेगी।
$process= ping localhost
# आउटपुट वेरिएबल में सेव करेगा।