PowerShell में एक चर के लिए मानक त्रुटि को पुनर्निर्देशित करें


16

यदि कोई त्रुटि मिलती है, तो मुझे सचेत करने के लिए मैं एक dcdiag परीक्षण की स्क्रिप्ट करना चाहूंगा। मुझे लगा कि मैं PowerShell में ऐसा करने में सक्षम हो सकता हूं ...

$test = dcdiag 2>$err

मुझे इस समय dcdiag से कोई त्रुटि नहीं है, इसलिए मैं सीधे परीक्षण नहीं कर सका, लेकिन मैंने अपवाद को फेंकने के लिए एक और PowerShell स्क्रिप्ट लिखी, उम्मीद है कि मैं उस स्क्रिप्ट का उपयोग करके इस पद्धति का परीक्षण कर सकता हूं। इससे ऊपर की विधि का उपयोग करने से यह काम नहीं किया इसलिए मैंने चुना:

try {
    $test = dcdiag
}
catch { 
    $err = $_.Exception.Message
}

इसने मेरे परीक्षण के मामले में काम किया, लेकिन मुझे नहीं पता कि यह dcdiag से मानक त्रुटि उठाएगा।

मैं PowerShell के एक चर में रीडायरेक्ट करने के लिए सबसे अच्छी तरह से मानक त्रुटि कैसे प्राप्त करूं, क्योंकि मैं इसका उपयोग dcdiag के साथ करना चाहूंगा?

जवाबों:


18

try...catch इस मामले में मदद नहीं करेगा।

आप करना चाहते हैं:

$test = dcdiag 2>&1
$err = $test | ?{$_.gettype().Name -eq "ErrorRecord"}
if($err){
    # Error has occurred
}

3
आह, मैंने मूल प्रश्न में नहीं कहा; क्या स्टडआउट और स्टैडर दोनों को रखना संभव है? यानी $ परीक्षण = स्टडआउट और $ इर = स्टडर?
समाप्त करें

2
@Ablue - $testदोनों होगा, यही कारण है कि मैं त्रुटि को फ़िल्टर कर रहा हूं $err
मनोजों

1
सुनिश्चित करें कि $ ErrorActionPreference "SilentlyContinue" पर सेट नहीं है। जब यह त्रुटियों की धारा उपलब्ध नहीं है।
cmcginty

@cmcginty वास्तव में $ ErrorActionPreference को "जारी रखें" पर सेट किया जाना चाहिए। साइलेंटकॉन्पट का उपयोग करके केवल स्टडआउट पर कब्जा कर लिया जाएगा क्योंकि स्टैडर को पूरी तरह से हटा दिया जाएगा (कम से कम पावरशेल 5 पर)
साइमन बर्गट

2
@ साइमन सही, मैंने कहा चुपचाप चुपचाप उपयोग न करें।
cmcginty
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.