2012-01-30 8 views
9

मैं निम्नलिखित विसंगति की एक व्याख्या की तलाश में हूँ: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 को सुलझाने में अपने काम से संबंधित है।)

+1

मुझे जवाब नहीं पता, लेकिन मुझे पता है कि लिखित-होस्ट को अन्य सभी लिखें cmdlets से अलग तरीके से व्यवहार किया जाता है। मैं अब प्लेग की तरह इसे टालता हूं। लिखें-आउटपुट के साथ अपना परीक्षण आज़माएं। टिप के लिए – EBGreen

+0

धन्यवाद! दुर्भाग्य से, एक ही परिणाम होता है। –

+1

लिखें-आउटपुट और लिखें-होस्ट के पास बहुत अलग उद्देश्य हैं। लिखें-होस्ट PowerShell होस्ट को जानकारी (टेक्स्ट) लिखता है। लिखें-आउटपुट पावरशेल पाइपलाइन पर एक ऑब्जेक्ट लिखता है, जिसे तब पाइपलाइन इनपुट स्वीकार करने वाले कमांड द्वारा अवरुद्ध और संसाधित किया जा सकता है। यदि ऐसा कोई आदेश उपयोग नहीं किया जाता है, तो ऑब्जेक्ट आउटपुट मेजबान को भी प्रदान किया जाता है। –

उत्तर

1

कि PowerShell 2.0 में एक बग की तरह दिखता है। मैंने PowerShell 3.0 पूर्वावलोकन के साथ पुन: उत्पन्न करने का प्रयास किया और अब यह अपेक्षित के रूप में काम करता है।

+0

क्या आपके पास ... खुश उत्तर है? –

+0

सीटीपी में अपग्रेड करें, इस मुद्दे को एमएसएफटी पर रिपोर्ट करें –