الإعلانات

كما يوحي الاسم ، يكون PowerShell أقوى بكثير من موجه أوامر Windows القياسي. مع هذه القوة تأتي إمكانية أكبر للأخطاء مربكة. إذا فشل البرنامج النصي الخاص بك فجأة ، قد لا تعرف من أين تبدأ البحث عن الخطأ الذي حدث. هذا هو المكان الذي تتم فيه معالجة الأخطاء في PowerShell.

إذا كنت معتادًا على اللغات الأخرى ، فمن المحتمل أنك تعرف أساسيات معالجة الأخطاء ، ولكن هناك بعض الجوانب الخاصة بـ PowerShell التي ستحتاج إلى معرفتها. هناك أربعة أجزاء لمعالجة الأخطاء في PowerShell: المعلمة Error Action ، و Try / Catch Blocks ، و Error Variable ، و logging.

خطأ في PowerShell أثناء التعامل مع الطريق السهل

تتمثل الخطوة الأولى في معالجة أخطاء PowerShell في التعامل مع شيء يوقف البرنامج النصي في مساراته. إذا لم يؤثر الفشل على بقية البرنامج النصي ، فقد يكون من الأفضل فقط إخبار PowerShell بتجاهل الأخطاء والمتابعة.

من ناحية أخرى ، ليس من الواضح دائمًا عندما يلقي أمر cmdlet محددًا خطأً في الإنهاء. بعض أوامر cmdlets تعرض خطأ ولكن لا توقف البرنامج النصي. قد يتركك ذلك في انتظار إكمال البرنامج النصي الخاص بك أثناء إخراجه من الهراء.

هذا هو المكان الذي -ErrorAction المعلمة يأتي في. يمكنك استخدام هذا لفرض cmdlet لمعالجة الخطأ بالطريقة التي تريدها. إذا كنت تقوم بتعديل برنامج نصي موجود ، فستلحقه بنهاية سطر cmdlet.

Get-ChildItem -Path "~ \ Documents \ *. jpg" -Recurse -ErrorAction Stop

من الواضح ، إذا كنت تستخدم الحصول على لChildItem cmdlet من تلقاء نفسها ، هذا الخطأ لا تفعل الكثير بالنسبة لك. ومع ذلك ، إذا كنت تريد أن تفعل أي شيء مع البيانات ، سيكون من الجيد إيقاف البرنامج النصي ، حتى تعرف أن البحث قد فشل ولماذا. بدلاً من ذلك ، إذا كنت تقوم بعمليات بحث متعددة ، فقم بتغيير المعلمة من قف إلى SilentlyContinue، لذلك يستمر البرنامج النصي إذا فشل البحث. إذا كنت تريد أن ترى ما هو الخطأ ، يمكنك استخدام استمر كمعلمة بدلا من ذلك.

Get-ChildItem -Path "~ \ Documents \ *. jpg" -Recurse -ErrorAction SilentlyContinue

إذا كنت تفضل أن يكون لديك خيار التحكم في ما يحدث في كل مرة يتم فيها تشغيل البرنامج النصي ، فيمكنك تغييره إلى استعلام. عندما يضرب cmdlet بعقبة ، فإنه يوفر خيارات: نعم, نعم للجميع, اوقف القيادة, تعليقأو مساعدة.

خطأ بسيط في معالجة PowerShell باستخدام ErrorAction

هذا الخيار أكثر مرونة بعض الشيء ولكنه يعني أن الأخطاء تتسبب في انتظار البرنامج النصي لإدخالك. هذا جيد إذا كنت تستخدم PowerShell لإرسال بريد إلكتروني كيفية إرسال بريد إلكتروني باستخدام ويندوز PowerShellهل تريد إرسال بريد إلكتروني بالطريقة العبقري غريب الأطوار؟ إليك كيفية إرسال بريد إلكتروني باستخدام Windows PowerShell. اقرأ أكثر أو بعض المهام البسيطة الأخرى ، ولكنها قد لا تكون شيئًا تريده عندما تجري عملية طويلة بين عشية وضحاها.

خطأ PowerShell في التعامل مع الطريق القوي

ال ErrorAction المعلمة يعالج أخطائك بطريقة غير معقدة. ومع ذلك ، إذا كنت تبحث عن مزيد من التحكم في الأخطاء ، فلا يزال PowerShell يغطيك. عن طريق حاول / اقبض، يمكننا الآن تقسيم البرنامج النصي عند إرجاع أوامر cmdlets لخطأ.

خطأ في التعامل مع PowerShell باستخدام try / catch

حسب الاسم المقترح، حاول / اقبض يتكون من جزأين. (يوجد ثلث تقنيًا ، لكننا سنصل إلى ذلك خلال دقيقة واحدة). الأول هو محاولة الجزء. ستقوم بتشغيل الكود العادي في هذا القسم. أنت لا تزال في طريقك لاستخدام -ErrorAction المعلمة ، ولكن لا يمكن إلا أن يكون تعيين قف. هذا العلم يضمن أن cmdlet الخاص بك يؤدي قبض على- حتى إذا لم يكن لديه خطأ إنهاء.

جرب {Get-Process "Cortana" -ErrorAction Stop. }

حاول أيضًا أن تمنع أوامر cmdlets الأخرى في حالة فشل البحث. في هذه الحالة ، إذا كنت ترسل احصل على عملية النتائج إلى توقف عملية، عملية بحث فاشلة تمنع تشغيل الأمر cmdlet الثاني.

والآن بعد أن قمت بإنشاء كتلة تجريبية من أوامر cmdlets ، ماذا تريد أن تفعل عندما تفشل؟ باستخدام قبض على النصف ، أنت ستحدد هذا.

القبض على {Write-Host "لم يتم العثور على العملية" }

كما هو الحال مع ErrorAction المعلمة ، عندما تفعل شيئا أكثر تعقيدا قليلا قبض على سيكون مفيدًا لأكثر من إعطاء فشل لغوي عادي ، خاصة عندما تفعل شيئا أكثر تعقيدا قليلا. (في المثال أعلاه ، يتم فرض الفشل باستخدام اسم التطبيق ، وليس اسم العملية.) لذا تأكد من اللعب باستخدام محاولة منع لإنشاء بحث / إجراء تحتاجه. يمكنك استعمال ال قبض على حظر البرنامج النصي لإرسال بريد إلكتروني إليك إذا فشل.

الجزء الثالث سهل الاستخدام إذا كنت تريد تشغيل شيء ما بغض النظر عن نجاح cmdlet أم لا. لهذا ، يمكنك استخدام أخيرا منع. يمكنك إضافة هذا بعد المحاولة والتقاط وتسجيل عندما ينتهي قسم من البرنامج النصي.

خطأ المتغير وتسجيل

يتحكم البرنامج النصي الآن في كيفية تعامله مع الأخطاء وكيف يستجيب لها. يمكنك استخدامه كمهمة مجدولة ، أو على الأقل تشغيلها عندما لا تكون في مكتبك. ومع ذلك ، كيف يمكنك التحقيق في فشل البرنامج النصي؟ مع ال -ErrorVariable معلمة أخطاء cmdlet الخاصة بك الكتابة إلى متغير مخصص.

هذا بديل للنظام $ خطأ متغير ، والذي يحتوي على جميع الأخطاء من الجلسة الحالية.

cmdlet الخاص بك يحتاج إلى الحصول على أطول قليلا. أولا ، تحديد متغير ، شيء من هذا القبيل $ SearchError سوف تفعل على سبيل المثال. عندما تتصل SearchError في ال ErrorVariable parmeter ، لا تستخدم علامة الدولار.

على الرغم من أنك تقوم بالاتصال بمتغير قمت بإنشائه ، نظرًا للطريقة التي تعمل بها المعلمة في الاتصال بدون علامة الدولار. ثم أضف ذلك إلى نهاية السطر.

Get-ChildItem -Path "~ \ Documents \ *. jpg" -Recurse -ErrorAction Continue -ErrorVariable SearchError

إذا قمت بإضافة + أمام اسم المتغير ، يمكنك إضافة إلى المتغير بدلاً من استبداله مباشرة. يمنحك هذا نفس سلوك متغير الخطأ العام. بدلا من ذلك ، يمكنك استخدام هذا الإخراج و حاول / اقبض لكتابة الإخراج مخصص ، والوقت ختمه.

تسجيل خطأ في PowerShell

لجعل هذا العمل ، قم بإنشاء ملف نصي مباشرةً بعد تعيين متغير الخطأ. هل هذا مع عنصر جديد الأمر cmdlet. قد ترغب في استخدام استعلام الخيار ل ErrorAction معامل. هذا يتيح لك إضافة إلى سجل موجود عند عنصر جديد فشل cmdlet.

SearchLog $ = New-Item "~ \ SearchLog.txt" - ملف من نوع -تعرّف على الاستعلام

الآن عند بناء الخاص بك حاول / اقبض كتلة ، يمكنك استخدام قبض على لتسجيل الدخول إلى ملف نصي. انت تستخدم الحصول حديثة لإنشاء الطابع الزمني. قد يكون التنسيق صعبًا لذا تأكد من نسخ ذلك من المثال.

حاول {Get-ChildItem -Path "~ \ Documents \ *. jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError. } Catch {Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-yy-hh_mm_ss) لم يتم العثور على الملفات التي تم إرجاعها خطأ: $ SearchError" }

كرر ذلك حسب الحاجة لجميع أوامر cmdlets ، ولديك الآن سجل جيد لأية أخطاء. إذا كنت ترغب في تتبع الأشياء التي تعمل بنجاح ، يمكنك إضافة ما شابه ذلك إضافة محتوى عند نهاية ال محاولة منع.

هذا التسجيل يعمل فقط عندما يكون لديك محاولة cmdlet تنجح. يمكنك بعد ذلك تسجيل أخطائك ونجاحاتك باستخدام طوابع زمنية. يتيح لك التسجيل الآن معرفة كل ما قام به البرنامج النصي أو النجاح أو الفشل.

PowerShell ليس هو خيارك الوحيد

بينما يعد PowerShell أداة سهلة الاستخدام للعديد من مهام Windows ، إلا أنه قد يكون من الصعب تعلمها. كما أنها ليست مناسبة لكل شيء. إذا كنت تجري صيانة النظام على جهاز الكمبيوتر الخاص بك أو التحقق من سلامة الملف، PowerShell مفيد. من ناحية أخرى ، إذا كنت تبحث عن تشغيل برنامج نصي لتنزيل الملفات من الإنترنت أو من مهمة عامة أخرى ، فلديك خيارات أخرى.

على سبيل المثال ، إذا كنت تأتي من خلفية Unix أو Linux ، فقد تكون أكثر راحة في استخدام bash shell. بفضل نظام Windows الفرعي لنظام Linux ، يمكنك الآن بسهولة استخدام أدوات bash وغيرها من أدوات Linux على جهاز كمبيوتر يعمل بنظام Windows 10. إذا كان هذا يبدو مثالياً لك ، فلا تنظر إلى أبعد من دليلنا إلى الحصول على قذيفة باش تعمل على ويندوز 10 كيفية الحصول على Linux Bash Shell على نظام التشغيل Windows 10هل تحتاج إلى استخدام Linux لا وقت للتبديل إلى كمبيوتر آخر أو تشغيل VM؟ قم بتشغيل Linux في نظام التشغيل Windows 10 باستخدام محطة Bash shell بدلاً من ذلك! اقرأ أكثر .

كريس ووك هو كاتب وموسيقي ، وكل ما يطلق عليه عندما يقوم شخص ما بعمل فيديوهات للويب.