পাওয়ারশেলে কোনও পরিবর্তনকে স্ট্যান্ডার্ড ত্রুটি পুনর্নির্দেশ করুন


16

যদি কোনও ত্রুটি পাওয়া যায় তবে আমাকে সতর্ক করতে আমি একটি ডিসিডিএগ পরীক্ষার স্ক্রিপ্ট করতে চাই। আমি ভেবেছিলাম যে আমি পাওয়ারশেলের মাধ্যমে এটি করতে সক্ষম হতে পারি ...

$test = dcdiag 2>$err

এই মুহুর্তে ডিসিডিএগ থেকে আমার কোনও ত্রুটি নেই, তাই আমি সরাসরি এটি পরীক্ষা করতে পারিনি, তবে আমি এই স্ক্রিপ্টটি ব্যবহার করে এই পদ্ধতিটি পরীক্ষা করতে পারব এই আশা করে আমি একটি ব্যতিক্রম ছুঁড়ে ফেলতে আরও একটি পাওয়ারশেল স্ক্রিপ্ট লিখেছিলাম। এটি উপরের পদ্ধতিটি ব্যবহার করে কাজ করে নি তাই আমি বেছে নিয়েছিলাম:

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

এটি আমার পরীক্ষার কেসটির জন্য কাজ করেছে, তবে আমি জানি না যে এটি ডিসিডিএগ থেকে মানক ত্রুটি তুলবে কিনা।

আমি কীভাবে ডিস্কায়াগ দিয়ে এটি ব্যবহার করতে চাইলে পাওয়ারশেলের কোনও ভেরিয়েবলের পুনঃনির্দেশে স্ট্যান্ডার্ড ত্রুটিটি কীভাবে অর্জন করব?

উত্তর:


18

try...catch এই ক্ষেত্রে সাহায্য করবে না।

আপনি করতে চান:

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

3
আহ, আমি মূল প্রশ্নে বলিনি; stdout এবং stderr উভয় রাখা সম্ভব? যেমন $ পরীক্ষা = স্টডআউট এবং $ এরর = স্টডার?
2:44 এবলু

2
@ ব্লু - $testউভয়ই থাকবে, সে কারণেই আমি ত্রুটিটি ফিল্টার করছি $err
মনোজাল্ড

1
নিশ্চিত করুন $ ত্রুটিঅ্যাকশনপ্রিফারেন্স "সাইলেন্টলি কনটিনিউ" তে সেট করা নেই। এটি যখন ত্রুটিগুলির স্ট্রিমটি উপলব্ধ হয় না।
সেমিচিনজি 21

@ সিএমসিগিন্টি আসলে $ ত্রুটিঅ্যাকশনপ্রেফারেন্সটি "চালিয়ে যান" এ সেট করা উচিত। সাইলেন্টলি কন্টিনিউ ব্যবহার করা কেবল স্টাডাউটকে ক্যাপচার করবে কারণ স্ট্যাডার সম্পূর্ণরূপে অপসারণ করা হবে (কমপক্ষে পাওয়ারশেলে 5 এ)
সাইমন বার্গোট

2
@ সিমন কারেক্ট, আমি বলেছি সাইলেন্টলি কনটিনিউ ব্যবহার করবেন না।
সেমিচিন্টি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.