2011-05-04 6 views
48

मैं कुछ कोड है समस्या यह है कि जब मैं इसे चेतावनी संदेश को सफलतापूर्वक दबाते हुए करता हूं, तो फ़ंक्शन के परिणामस्वरूप $ foo को पॉप्युलेट करने का नकारात्मक दुष्प्रभाव भी होता है।

मैं चेतावनी को $ null पर कैसे रीडायरेक्ट कर सकता हूं, लेकिन फिर भी $ foo populated?

इसके अलावा, आप मानक आउटपुट और मानक त्रुटि दोनों को कैसे शून्य पर रीडायरेक्ट करते हैं? (लिनक्स में, यह 2>&1 है।)

+1

क्या चेतावनी संदेश पैदा करता है की तरह कर सकते हैं? यदि आप 'कुछ फ़ंक्शन' के लेखक हैं, तो आप इसे उचित रूप से बदल सकते हैं। – stej

+0

वास्तव में, बोर्न शैल (लिनक्स) में, यह '2>/dev/null 1>/dev/null' है; आपके द्वारा दिखाया गया रीडायरेक्ट stdr को stdout के समान स्थान पर रीडायरेक्ट करता है - जो '/ dev/null' हो सकता है, या एक नियमित फ़ाइल हो सकती है। – jpaugh

उत्तर

10

यह काम करना चाहिए।

$foo = someFunction 2>$null 
-2

त्रुटि संदेश मान लिया जाये कि पहले दिया जाता है:

$foo = someFunction 
$foo = $foo[1] 

चर मूल्य पहले लौटाया जाता है:

$foo = someFunction 
$foo = $foo[0] 
97

मैं मानक आउटपुट पुनर्निर्देशित करने के लिए इस तरह से पसंद करते हैं (देशी PowerShell) ...

($foo = someFunction) | out-null 

लेकिन यह भी काम करता है:

($foo = someFunction) > $null 

"someFunction" का नतीजा साथ $ foo को परिभाषित करने के बाद सिर्फ मानक त्रुटि अनुप्रेषित करने के लिए,

($foo = someFunction) 2> $null 

कर यह प्रभावी रूप से एक ही जैसा कि ऊपर उल्लेख है।

या "someFunction" से किसी भी मानक त्रुटि संदेश रीडायरेक्ट करने के लिए और उसके बाद परिणाम के साथ $ foo को परिभाषित:

$foo = (someFunction 2> $null) 

अनुप्रेषित करने के लिए दोनों आप कुछ ही विकल्प हैं:

2>&1>$null 
2>&1 | out-null 
+0

धन्यवाद जे। यह मेरी समस्याओं में से एक हल करता है। –

2

चेतावनी संदेशों चाहिए Write-Warning cmdlet का उपयोग करके लिखा जाए, जो चेतावनी संदेशों को -WarningAction पैरामीटर या $WarningPreference स्वचालित चर के साथ दबाया जा सकता है। इस सुविधा को लागू करने के लिए एक फ़ंक्शन को CmdletBinding का उपयोग करने की आवश्यकता है।

function WarningTest { 
    [CmdletBinding()] 
    param($n) 

    Write-Warning "This is a warning message for: $n." 
    "Parameter n = $n" 
} 

$a = WarningTest 'test one' -WarningAction SilentlyContinue 

# To turn off warnings for multiple commads, 
# use the WarningPreference variable 
$WarningPreference = 'SilentlyContinue' 
$b = WarningTest 'test two' 
$c = WarningTest 'test three' 
# Turn messages back on. 
$WarningPreference = 'Continue' 
$c = WarningTest 'test four' 

यह कमांड प्रॉम्प्ट पर कम है, तो आप -wa 0 उपयोग कर सकते हैं बनाने के लिए:

PS> WarningTest 'parameter alias test' -wa 0 

राइट-त्रुटि, राईट-शब्दाडंबरपूर्ण और राईट-डिबग संदेशों के उनकी संगत प्रकार के लिए इसी तरह की सुविधा प्रदान करते हैं।

3

यदि यह त्रुटियों आप छुपाना चाहते हैं तो आप इस

$ErrorActionPreference = "SilentlyContinue"; #This will hide errors 
$someObject.SomeFunction(); 
$ErrorActionPreference = "Continue"; #Turning errors back on 
संबंधित मुद्दे