بالتأكيد، مقارنة الملفات أو محتويات الملفات في نظام التشغيل ويندوز هي إحدى الأشياء التي قمت بها على مر السنين. ولكن هل لاحظت أن مقارنة الملفات والمحتويات تجعل عينيك تتعب في بعض الأحيان؟ حسنًا، لديك الحظ السعيد، يمكنك مقارنة الكائنات باستخدام PowerShell بالطريقة التي تريدها باستخدام الأمر Compare-Object
.
في هذا البرنامج التعليمي، ستتعلم كيفية مقارنة الكائنات باستخدام PowerShell، مثل الملفات أو محتويات الملفات، مع تخصيص النتائج.
توفر عينيك التوتر وقارن الكائنات بكفاءة!
المتطلبات المسبقة
سيكون هذا البرنامج التعليمي عمليًا، ولكن بمجرد أن يكون لديك حاسوب يعمل بنظام التشغيل ويندوز مع برنامج PowerShell، فأنت جاهز للبدء. يتم استخدام إصدار PowerShell 5.1 في هذا البرنامج التعليمي.
مقارنة محتويات الملفات
تخيل أن لديك ملفين مختلفين بنفس المحتوى. كيف ستعرف إذا ما إذا كان كل من الملفين يحتوي على نفس المحتوى؟ يمكن أن يكون حل ذلك باستخدام أمر Get-Content
. يستخدم أمر Get-Content
لاسترداد محتوى ملف من موقع محدد.
افتح PowerShell، وقم بتشغيل الأوامر التالية للحصول على محتوى الملفات المحددة (Get-Content
) إلى متغيرات ($file1
و $file2
). استبدل المسار أدناه بمسار الملفات التي ترغب في مقارنتها.

الآن، قم بتشغيل الأمر Compare-Object
أدناه لمقارنة محتويات $file1
(-ReferenceObject
) مع $file2
(-DifferenceObject
).
بشكل افتراضي، لا يظهر Compare-Object
القيم الموجودة في كلتا المتغيرات. كحل، أضف المعامل -IncludeEqual
لعرض القيم في النتيجة.
من النتيجة أدناه، يخبرنا SideIndicator ما إذا كانت كلتا الملفات لديها نفس المحتوى (لكل سطر) أم لا:
SideIndicator | Definition |
== | Indicates the content is present in both files ($file1 and $file2). |
=> | Indicates the content only exists in the -DifferenceObject file ($file2). |
=> | Indicates the content only exists in the -ReferenceObject file ($file1). |

ربما تفضل مقارنة السلاسل بحساسية الحالة. إذا كنت كذلك، فأضف المعامل -CaseSensitive
لأن الأمر Compare-Object
غير حساس للحالة افتراضيًا.
قم بتشغيل الأوامر أدناه لمقارنة $file1
مع $file2
، كلاهما مع وبدون حساسية الحالة.
كما يمكنك رؤية أدناه، بدون استخدام معامل -CaseSensitive
، لا يظهر أمر Compare-Object
powershell في الناتج.

يعمل مقارنة السلاسل أيضًا بشكل مماثل لمقارنة محتويات الملف، حيث يمكنك تحديد السلاسل أو استخدام متغيرات لتمثيل السلاسل المراد مقارنتها. تذكر أن أمر
Compare-Object
يقارن بين سلاسل المصدر وليس الأحرف.
مقارنة قوائم الملفات من مواقع مختلفة
الآن بعد أن تعرف كيفية مقارنة محتويات الملف، لماذا لا تقارن الملفات الفعلية من مواقع مختلفة؟ يأتي في المساعدة مقارنة قوائم الملفات عند إدارة خادمين مختلفين حيث يتم الاحتفاظ بنفس المجلد لخدمة تحتوي على نفس الملفات.
في هذا الوقت، ستستخدم أمر Get-ChildItem
للحصول على قائمة الملفات في مجلد للمقارنة مع قائمة مجلد آخر من الملفات.
قم بتشغيل الأوامر أدناه للحصول على قوائم الملفات من المجلدين C:\Temp\Folder1\ و C:\Temp\Folder2 وقم بتخزين القوائم في المتغيرات $Folder1List و $Folder2List.
يمكنك أيضًا استخدام معامل
-Recurse
في أمرGet-ChildItem
لاسترجاع قائمة ملفات بشكل تكراري في المجلدات الفرعية.

Translated Text:
مقارنة الكائنات باستخدام PowerShell حسب الخصائص
لقد قمت للتو بمقارنة الملفات في مواقع مختلفة، ولكن قد ترغب في إضافة خيار آخر لمقارنة الملفات حسب الخصائص. وفي هذا العرض التوضيحي، ستقوم بمقارنة الملفات حسب وقت آخر وصول.
قم بتشغيل الأوامر التالية لمقارنة الملفات من مجلدات مختلفة ($Folder1 و $Folder2) حسب وقت آخر وصول.

مقارنة العمليات والخدمات
قدرات أمر Compare-Object
ليست مقتصرة فقط على مقارنة السلاسل أو المحتوى في الملفات. يمكنك أيضًا مقارنة العمليات والخدمات، وهكذا.
ربما ترغب في التقاط الخدمات بين خادمين. في هذه الحالة، يمكنك تخزين الخدمات في متغيرات ومقارنتها.
قم بتشغيل الأوامر التالية لمقارنة الخدمات بين خادمين مختلفين ($server1
و $server2
).

إذا كنت تفضل مقارنة العمليات، فإن الأوامر المطلوبة للتنفيذ مشابهة لمقارنة الخدمات. يمكنك أيضًا مقارنة العمليات على نفس الجهاز أو خادمين مختلفين.
قم بتشغيل الأوامر أدناه لالتقاط العمليات الجارية من جهازين (Jumpbox
و AD
servers) في متغيرات ومقارنتها.

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

مقارنة المستخدمين بين مجموعات Active Directory المختلفة
إذا كنت تدير نفس مجموعة المستخدمين من مجموعات AD مختلفة، فإن مقارنة قائمة المستخدمين باستخدام أمر Compare-Object
ستكون مفيدة. من خلال ذلك، يمكنك الحفاظ على مراقبة وثيقة إذا كان مستخدم مفقودًا من أيٍ من مجموعتين مختلفتين من AD.
قم بتشغيل الأوامر أدناه لمقارنة المستخدمين بين مجموعتين مختلفتين من AD (staticvmusers
و vdivmusers
).

الاستنتاج
في هذا البرنامج التعليمي، لقد تعلمت قليلًا عن كيفية مقارنة الكائنات باستخدام PowerShell بعدة طرق، من محتويات الملفات إلى المستخدمين في مجموعات AD. لقد أدركت أن cmdlet Compare-Object هو حلاً سريعًا لمقارنة الملفات والخدمات والعمليات، وما إلى ذلك.
لقد اكتسبت المعرفة الأساسية في استخدام cmdlet Compare-Object. الآن، لماذا لا تبني على هذه المعرفة الجديدة التي اكتسبتها من خلال تعلم مقارنة مصفوفات PowerShell القوية؟
Source:
https://adamtheautomator.com/compare-objects-with-powershell/