PowerShell / المتقدم: البعيد والأمان والحالة المطلوبة والموثوقية / الدرس 17
بناء أتمتة موثوقة ببوابات أثر صريحة
اربط الحالة وShouldProcess وحدود WhatIf وملكية المعاملة والمحاولات والإلغاء ودليل التعافي.
في هذه الصفحة
أهداف الدرس
- شرح حاجة SupportsShouldProcess لاستدعاء حارس فعلي.
- فصل المعاينة والتكرارية والذرية والصحة.
- حفظ الهوية والمجهول عبر المحاولات.
للعملية الموثوقة شروط قبلية وبعدية صريحة
حدد المورد والمالك والمدخل والإنجاز؛ لا يجعل Set الفعل تكرارياً أو ذرياً. قارن الحالة بالواجهة واحفظ الهوية. يختلف التقارب والجاهزية وقد يكتب ملفاً مرفوضاً أو يرد API دون ديمومة. افصلها قبل المعاينة والإعادة. وقد ينجح حفظ ملف ثم يرفض التطبيق محتواه، لذلك لا يجوز أن يحل نجاح cmdlet محل تحقق الشرط المفيد الذي وعدت به الواجهة.
يحمي WhatIf الآثار التي تحترم عقده فقط
تعرض السمة الأعلام ويجب حراسة الفعل بـ ShouldProcess فعلياً؛ لا توقف السمة وحدها مساعداً أو خارجياً. جاور القرار الأثر وسم الهدف والفعل واضبط المتداخل. ليست المعاينة عزلاً أو رجوعاً أو ضمان نجاح، ولا نعتمدها لحماية المضيف لأننا لا ننفذ. وقد تحدث آثار في مساعد يستدعى قبل البوابة أو خارجها، لذا يحتاج اختبار WhatIf إلى مراجعة الرسم كاملاً لا وجود السمة في تعريف الدالة فقط.
عرض البوابة بنتيجة مصطنعة لا تعديل مضيف
تحرس الدالة سجل خطة فقط بلا مورد حقيقي وتبقى غير مختبرة فلا رسالة WhatIf دقيقة مدعاة. يحتاج الجسم الحقيقي adapter وفشلاً ولاحقاً، واختبر غياب أثر المرفوض والمعاينة وصدق المسموح. لا تستبدل نجاحها اختبار العملية المصرح. ويجب أن يفحص الاختبار الفعلي غياب الآثار عند المنع، لا مجرد ظهور رسالة معاينة مطمئنة، ثم يتحقق من صدق نتيجة المسار المسموح.
function Set-LabPlan {
[CmdletBinding(SupportsShouldProcess)]
param([Parameter(Mandatory)][string]$Label)
if ($PSCmdlet.ShouldProcess($Label, 'Describe synthetic plan')) {
[pscustomobject]@{ Label = $Label; Effect = 'none' }
}
}
Set-LabPlan -Label review -WhatIf
يعيد الجسم بيانات فقط ولم ينفذ محرك أو تأكيد أو معاينة أو تغيير.
لا يصبح الإكمال المجهول عملية جديدة عميانياً
قد يلتزم الأثر مع مهلة فصالح الهوية لا طلباً جديداً. ميز الرجوع والغياب والرفض والعابر وأعد الآمن الموثق بحد وإلغاء. لا تعكس finally معاملة أو رسوماً وقد يحتاج المشترك مزامنة. احفظ الأول والتعافي دون سر. كما أن finally تنظف موارد يملكها البرنامج ولا تعكس التزام خدمة خارجية، لذلك ينبغي أن يميز التعافي المعروف من نتيجة لم يثبت اكتمالها.
اختبار بوابة القبول المعلنة دون آثار
يشترط الجدول نطاقاً ومدخلاً وسماحاً لا ShouldProcess أو تخويلاً. اختبر لاحقاً الرفض والمعاينة والمنع والنجاح والجزئي والانقطاع والتوافق، واترك احتياطياً ومالك تعاف. الموثوق عمر قابل للتفسير لا أسماء أعلام آمنة؛ لا يستدعي النموذج adapter. ولا ينفذ حتى فرع السماح في نموذج القرار عملية حقيقية؛ فهو يوضح سياسة بيانات فقط ولا يمنح نفسه تخويلاً على مورد أو مستخدم.
cases = [{'scope': True, 'valid': True, 'preview': True}, {'scope': True, 'valid': True, 'preview': False}]
for index, case in enumerate(cases, 1):
perform = case['scope'] and case['valid'] and not case['preview']
print(f'case={index} synthetic_effect_allowed={perform}')
case=1 synthetic_effect_allowed=False
case=2 synthetic_effect_allowed=True
تمثل سياسة فقط ولا ينفذ المسموح فعلاً أو يثبت تأكيد PowerShell أو التخويل.
الأخطاء الشائعة وإصلاحها
اعتبار السمة وحدها حماية أثر
- لماذا يحدث؟
- لم تحرس الفعل.
- كيف تصلحه؟
- استدعها بحد الأثر.
- كيف تتجنب تكراره؟
- اختبر غياب الأثر.
تسبب المهلة طلباً مكرراً جديداً
- لماذا يحدث؟
- اختلط المجهول بغياب الأثر.
- كيف تصلحه؟
- صالح الأصل والحمولة.
- كيف تتجنب تكراره؟
- عرف التكرارية قبل التنفيذ.
اعتبار المعاينة جاهزية تطبيق
- لماذا يحدث؟
- اختلط التنبؤ واللاحق.
- كيف تصلحه؟
- افحص الفعل المصرح مستقلاً.
- كيف تتجنب تكراره؟
- افصل التقارب والصحة والتعافي.
اختبر فهمك
1. لماذا قد تؤثر دالة مع WhatIf عرضاً؟
اعرض الحل المشروح
قد تعمل خارج البوابة أو تتجاهلها المساعدات؛ راجع الرسم واختبر الغياب لا علماً كعزل.
2. ماذا يحفظ التعافي بعد تحديث بعيد مجهول؟
اعرض الحل المشروح
احفظ الهوية والحمولة والفشل والمصالحة ولا تخترع جديداً قبل ثبوت الأصل وأمان تكراره.
أهم ما تعلمته
- احرس الأثر الفعلي واختبر المعاينة بصدق.
- استخدم ملكية ومحاولات محدودة ولاحقاً متحققاً.