मैं निम्नलिखित विसंगति की एक व्याख्या की तलाश में हूँ:powershell 2.0 कमांड लाइन पुनर्निर्देशन
निम्नलिखित powershell स्क्रिप्ट foo.ps1 को देखते हुए:
write-host "normal"
write-error "error"
write-host "yay"
यह चल रहा है
C:\>powershell .\foo.ps1 > out.txt 2>&1
साथ
उत्पाद:
normal
C:\foo.ps1 : error
At line:1 char:10
+ .\foo.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,foo.ps1
Write-Host : The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in one FileStream and in Win32 co
de or another FileStream. This may cause data loss.
At C:\foo.ps1:3 char:11
+ write-host <<<< "yay"
+ CategoryInfo : NotSpecified: (:) [Write-Host], IOException
+ FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.WriteHostCommand
लेकिन साथ चल रहा:
C:\>powershell .\foo.ps1 2>&1 > out.txt
उत्पादन (सही):
normal
C:\foo.ps1 : error
At line:1 char:10
+ .\foo.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,foo.ps1
yay
मैं लगभग यह सोच कर कि पुनर्निर्देशन के आदेश Windows में मायने रखता में अपने आप हल हो के सभी तथापि, TechNet usage page for command redirection में उदाहरण stderr पुनर्निर्देशन से पहले फ़ाइल पुनर्निर्देशन दिखाते हैं।
क्या कोई मुझे यह समझा सकता है?
C:\>powershell get-host
Name : ConsoleHost
Version : 2.0
InstanceId : 53c90e87-ded1-44f9-8e8d-6baaa1335420
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : en-US
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
और लिखने-उत्पादन का उपयोग कर एक ही परिणाम का उत्पादन:
संदर्भ के लिए, इस के साथ सर्वर 2003 x64 SP2 पर किया जा रहा है।
(यह सवाल this को सुलझाने में अपने काम से संबंधित है।)
मुझे जवाब नहीं पता, लेकिन मुझे पता है कि लिखित-होस्ट को अन्य सभी लिखें cmdlets से अलग तरीके से व्यवहार किया जाता है। मैं अब प्लेग की तरह इसे टालता हूं। लिखें-आउटपुट के साथ अपना परीक्षण आज़माएं। टिप के लिए – EBGreen
धन्यवाद! दुर्भाग्य से, एक ही परिणाम होता है। –
लिखें-आउटपुट और लिखें-होस्ट के पास बहुत अलग उद्देश्य हैं। लिखें-होस्ट PowerShell होस्ट को जानकारी (टेक्स्ट) लिखता है। लिखें-आउटपुट पावरशेल पाइपलाइन पर एक ऑब्जेक्ट लिखता है, जिसे तब पाइपलाइन इनपुट स्वीकार करने वाले कमांड द्वारा अवरुद्ध और संसाधित किया जा सकता है। यदि ऐसा कोई आदेश उपयोग नहीं किया जाता है, तो ऑब्जेक्ट आउटपुट मेजबान को भी प्रदान किया जाता है। –