اللقطات والانحراف
كل أداة أخرى تخبرك كيف يبدو الجهاز الآن. أما السؤال الذي يطرحه المسؤول فعلًا فهو ما الذي يختلف عما كان عليه حين كان يعمل، ولا شيء في Windows الأصلي يجيب عنه.
ما الذي تحمله اللقطة
الجهاز كله في لحظة واحدة: كل خدمة وبرنامج تشغيل، مع نوع بدء التشغيل والحساب ومسار التشغيل ووسائطه، وقيمة التجزئة للملف الذي يشغّله وموقّعه، وتبعياته وما يعتمد عليه، ومشغّلاته، وامتيازاته المطلوبة، ونوع SID الخاص به، وكذلك security descriptor، إضافةً إلى اسم الجهاز والحساب الذي أخذها وهل كان ذلك الحساب مسؤولًا.
bws snapshot create before.json --note "before the patch"
هي JSON بحقل واحد في كل سطر. وهذا مقصود: فهو يعني أن اللقطة تدخل مستودعًا ويقرؤها git diff، فلا تكون مقارنة الأداة نفسها هي الطريقة الوحيدة للنظر في واحدة.
احفظها بما هي عليه. اللقطة تصف الجهاز كله، حتى كل مسار تشغيل وكل security descriptor. وتُكتب بأي أذونات يحملها مجلدها أصلًا، والأداة لا تضيّق شيئًا، فالمجلد الذي يستطيع آخرون قراءته يستطيعون أن يقرؤوا فيه كل ذلك.
ثم اسأل عما يختلف
$ bws snapshot diff before.json --live --exit-code
Changed (2):
Spooler Print Spooler
startType: Manual -> Automatic
status: Stopped -> Running (running state, not configuration)
wlidsvc Microsoft Account Sign-in Assistant
status: Stopped -> Running (running state, not configuration)
Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
- يُبلَّغ عن التكوين وحالة التشغيل كلٌّ على حدة. لقطتان بينهما يوم تختلفان فيما يعمل مصادفةً، وليس أغلب ذلك انحرافًا. فإذا اختلطا ضاع السطر الوحيد المهم، وهو نوع بدء تشغيل غيّره أحدهم، تحت أربعين سطرًا لا تهم.
- ما تعذرت مقارنته يُسرد ولا يُخفى. الحقل الذي لم تقرأه إحدى اللقطتين قط، لأن تلك الجلسة لم تكن تملك صلاحية قراءته، يظهر على أنه لم تتم مقارنته تحت عنصره، ويحسب الملخص تلك العناصر. فالمقارنة التي تقول لم يتغير شيء تعني أنه لم يتغير شيء فيما استطاع الطرفان رؤيته.
- مقارنة لقطة مأخوذة بصلاحيات مرتفعة بأخرى دونها ستكذب، فتبلّغ عن عناصر محذوفة لم يحذفها أحد. وكل ملف يسجّل هل كان الحساب الذي أخذه مسؤولًا، وتقول المقارنة ذلك.
- ملفان، لا ملف وهذا الجهاز فقط. خذ واحدة على بيئة التجهيز وأخرى على بيئة الإنتاج وقارن بينهما في أي مكان: فالجواب عن لماذا تختلف بيئة التجهيز لا يحتاج إلى حضور أي من الجهازين.
وتفعل النافذة الشيء نفسه تحت Audit.... الأمر Take snapshot... يكتب الملف نفسه، مع ملاحظة إن كتبت واحدة، والأمر Compare with this machine... أو Compare two snapshots... يعرض ما تغيّر بدل القائمة، صفًا لكل حقل، وكل ما يجعل المقارنة غير تامة الدقة مذكور فوق الجدول. وShow يضيّقها إلى الفروق أو إلى حقل واحد، وExport... يكتبها في ملف CSV.
رمز الخروج هو المقصود
الخيار --exit-code ينتهي بالرمز 5 عندما يختلف التكوين: عنصر أُضيف أو أُزيل، أو عنصر مضبوط بشكل مختلف. والخدمة التي توقفت أو بدأت من تلقاء نفسها يُبلَّغ عنها ولا تُحتسب، وكذلك النسخ الخاصة بكل مستخدم التي ينشئها Windows لكل جلسة مسجَّل دخولها، فهذه تُترك وتُعدّ. وهذا ليس فشلًا: فالانحراف هو ما صُنعت هذه الأداة لإيجاده، وإيجاده ليس فشلًا، ولذلك له رقم خاص به بدل أن يستعير الرقم الذي يعني أن شيئًا ساء.
# يوم يدخل الجهاز الخدمة
bws snapshot create C:\baselines\web01.json --note "after the build"
# كل ليلة، من مهمة مجدولة
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - لا انحراف في التكوين
# 5 - انحرف التكوين، ويقول drift.json ما الذي حدث
# 3 - عمل ولم يستطع قراءة كل شيء، فالجواب جزئي
هذه هي الآلية كلها: خط أساس يؤخذ والجهاز سليم معروف، وسؤال يُطرح كل ليلة. وفي أول ليلة يجيب فيها 5 يعرف أحدهم في تلك الليلة نفسها لا في صباح يتعطل فيه شيء.