إذا كنت بحاجة إلى التحقق من صحة مسار إلى ملف أو مفتاح سجل أو شهادة أو أي مسار آخر لـ PowerShell drive ، فستحتاج إلى أمر Test-Path.
أمر Test-Path هو طريقة بسيطة ولكنها مفيدة للتحقق بسرعة من العديد من السمات لملف وعناصر أخرى. يمكنه التحقق مما إذا كان الملف موجودًا (أو أنواع عناصر أخرى) ، وما إذا كان السلسلة في تنسيق المسار الصحيح ، أو حتى ما إذا كان العنصر أحدث من وقت محدد أو أقدم منه.
في هذا البرنامج التعليمي ، ستتعلم كل ما تحتاج إلى معرفته عن أمر PowerShell Test-Path وكيفية استخدامه لتحسين نصوص PowerShell الخاصة بك.
المتطلبات المسبقة
إذا كنت ترغب في متابعة الأمثلة في هذا البرنامج التعليمي ، فستحتاج إلى شيء واحد ؛ PowerShell. على وجه التحديد ، ستستخدم البرنامج التعليمي PowerShell v7.03 على Windows 10 ، على الرغم من أن العديد من التقنيات التي ستتعلمها ستنطبق أيضًا على الإصدارات الأقدم.
ما الذي يفعله أمر Test-Path؟
أمر PowerShell Test-Path هو واحد من أبسط الأوامر الموجودة. إنه أمر كان موجودًا في PowerShell منذ البداية ويعيد قيمتين فقط ؛ صحيح أو خاطئ.
ولكن ، لا تدع البساطة يخدعك ؛ فإنه سيوفر لك الكثير من الوقت في التحقق من المعلومات في نصوص PowerShell الخاصة بك.
اعتبر أمر الـ PowerShell Test-Path كأداة لمراقبة الجودة عند العمل مع مزودات ومحركات الـ PowerShell. عند كتابة نص، ستعمل عادةً مع عناصر مختلفة تحتويها محركات الـ PowerShell. محركات الـ PowerShell مثل C:\، HKLM، Cert، وما إلى ذلك.
Test-Path
لا يعمل مع جميع محركات الـ PS. على سبيل المثال، إذا حاولت استخدامTest-Path
ضد مفتاح سجل، فسيعمل. إذا حاولت استخدامTest-Path
ضد قيمة سجل، فسيعيدFalse
في كل مرة.
إذا كنت متشوقًا، قم بتشغيل أمر Get-PSDrive
الآن في PowerShel ولاحظ جميع محركات الـ PS التي تظهر لك.

كل هذه المحركات تحتوي على مسارات داخلها مثل C:\Windows، HKLM:\Software، وما إلى ذلك. عند العمل مع المسارات داخل نصوص PowerShell الخاصة بك، دائمًا ما يكون من الجيد الممارسة أولاً اختبار ما إذا كان المسار صالحًا أم لا. هذا ما يفعله أمر Test-Path
.
Test-Path
يحدد شرطًا يعيد True
أو False
اعتمادًا على ما إذا كان الشرط محققًا (عادةً ما يتعلق بما إذا كان ملف/مجلد، مفتاح سجل، شهادة، أو حتى متغير موجودًا أم لا).
معلمات واستخدامات Test-Path
مثل العديد من سطور الأوامر في PowerShell، يحتوي سطر الأمر Test-Path
على معلمات مختلفة تغير سلوكه. دعنا نغطي الآن كل معلمة ونوضح كيفية عملها ونوع النتائج التي قد تتوقع رؤيتها.
المسار
المعلمة Path
هي معلمة إلزامية ستستخدمها مع كل تنفيذ لـ Test-Path
. تحدد المعلمة Path
مسار محرك PSDrive الذي ترغب في اختبار وجوده.
إذا، على سبيل المثال، كنت ترغب في اختبار ما إذا كان المجلد C:\Foo موجودًا أم لا، يمكنك توفير المسار المناسب لمعلمة Path
. ثم، اعتمادًا على ما إذا كان C:\Foo موجودًا فعليًا أم لا، سيقوم Test-Path
بإرجاع True
أو False
.
يمكن استخدام نفس التقنية لأي مسار عنصر أيضًا. ربما ترغب في اختبار ما إذا كانت المفتاح السجل HKLM:\Software\Foo موجودة. ما عليك سوى استخدام مسار المفتاح السجل مع معلمة Path
.
تذكر أن جميع التقنيات التي تم عرضها خلال هذا البرنامج التعليمي ستعمل مع أي مسار لمحرك PowerShell.
استخدام الرموز المتعددة
ماذا يحدث إذا لم يكن لديك اهتمام بقيمة حرفية للمسار؟ بدلاً من ذلك، ترغب فقط في التحقق مما إذا كان المسار يتطابق مع نمط معين. في هذه الحالة، يمكنك استخدام الرموز المتعددة في قيمة Path
.
ربما ترغب في التحقق مما إذا كان المجلد C:\Foo يحتوي على أي مجلد فرعي يبدأ بـ Bar. في هذه الحالة، يمكنك استخدام رمز وحيد.
مرة واحدة تنفذ الأمر أعلاه، سيتحقق Test-Path
من وجود مجلد يبدأ بـ Bar ويعيد True
أو False
اعتمادًا على ما إذا كان هناك أي مجلد يطابق ذلك المعيار أم لا.
النجوم (*
) تطابق حرف واحد أو أكثر ولكن يمكنك أيضًا استخدام علامات الاستفهام (?
) للحصول على تفاصيل أكثر دقة واختبار لحرف واحد فقط.
باستخدام السيناريو أعلاه كمثال، إذا كان المجلد C:\Foo\Bar1 موجودًا، يمكنك اختبار أي مجلد فرعي من Foo يبدأ بـ Bar ويكون بالضبط من أربعة أحرف باستخدام الأمر أدناه.
إذا كنت، لأي سبب من الأسباب، ترغب في استخدام معلمة
Path
باستخدام الرموز البارزة ولكن تريد تطابق حرف واحد مثل*
حرفيًا، يمكنك دائمًا تفادي حرف البارزة باستخدام علامة النقل العكسي (`).
LiteralPath
معلمة LiteralPath
مطابقة تقريبًا لمعلمة Path
باستثناء واحد؛ حيث أنها لا تسمح بالرموز البارزة. باستخدام LiteralPath
، ستفسر قيمة المسار حرفيًا.
على سبيل المثال، إذا حاولت استخدام النجمة أو علامة الاستفهام داخل قيمة المسار باستخدام LIteralPath
، سيتجاهل Test-Path
تمامًا الرموز البارزة ويختبر حرفيًا لـ C:\Foo\Bar? مثل المثال أدناه.
يجب عليك استخدام
LiteralPath
كمعلمة المسار الافتراضية إذا لم تكن بحاجة إلى استخدام أي رموز بارزة لضمان أنTest-Path
يختبر المسار الذي تتوقعه.
PathType
افتراضيًا، عند تشغيل Test-Path
وتقديمه مسارًا، سيُعيد True
إذا وجد أي شيء في ذلك المسار. العنصر بمسار يمكن أن يكون حاوية مثل مجلد ملف، مفتاح سجل، متجر الشهادات، وهلم جرا، أو ورقة مثل ملف، قيمة سجل، أو شهادة.
يمكنك إجبار Test-Path
على الحصول على تفاصيل أكثر واختبار بشكل محدد لعنصر الحاوية أو الورقة باستخدام معلمة PathType
.
يستخدم Test-Path قيمة
PathType
Any
افتراضيًا.
إذا، على سبيل المثال، كان هناك مجلد في C:\Foo\Bar وكنت تبحث عن ملف في ذلك المسار، يمكنك استخدام معلمة PathType
كما هو موضح أدناه. تريد فقط التحقق مما إذا كان هناك ملف يسمى C:\Foo\Bar.
ربما بدلاً من ذلك، تحتاج إلى التحقق مما إذا كان C:\Foo\Bar في الواقع ملفًا. في هذه الحالة، ستتحقق من الحاوية.
تضمين
إذا كنت تستخدم معلمة Path
والرموز المرجعية، قد تحتاج في بعض الأحيان إلى التحديد بشكل أكبر. في هذه الحالة، تحتاج إلى النظر في المعلمات Include
و Exclude
.
لنفترض أن لديك المجلدات التالية:
- C:\Foo\Bar1
- C:\Foo\Bar2
- C:\Foo\Bar3
ترغب في التحقق مما إذا كان هناك أي مجلد يبدأ بـ Bar ويكون بالضبط من أربعة أحرف مثل Bar1، Bar2، إلخ.
الأمر أعلاه يعمل بشكل جيد، ولكن الآن تريد فقط العثور على مجلدات في C:\Foo تسمى Bar2. في هذه الحالة، يمكنك استخدام معلمة Include
.
الأمر أعلاه الآن يختبر أساساً مجلدًا واحدًا C:\Foo\Bar2. ربما ستكون أفضل لك ببساطة استخدام Test-Path -Path 'C:\Foo\Bar2' -PathType Container
بدلاً من ذلك.
استبعاد
المعلمة Exclude
تعمل بنفس الطريقة التي تعمل بها معلمة Include
باستثناء أنها تستبعد المسارات التي تطابق سلسلة معينة.
ربما ترغب في التأكد من وجود ملف واحد على الأقل داخل مجلد C:\Foo، وتستخدم الأمر التالي:
الأمر أعلاه يعيد True
أو False
إذا كانت هناك ملفات في C:\Foo. ولكن ربما ترغب في التأكد من وجود أي ملفات باستثناء تلك التي لديها امتداد ملف txt
. في هذه الحالة، يمكنك استخدام المعلمة Exclude
باستخدام بادئ متعدد لاستبعاد جميع الملفات ذات امتداد txt
من الاختبار.
تصفية
وفقًا لوثائق مايكروسوفت، تحدد المعلمة Filter
“تصفية بتنسيق أو لغة مزود البيانات. قيمة هذه المعلمة تؤهل كمعلمة Path
. بناء الجملة للتصفية، بما في ذلك استخدام أحرف البدائل، يعتمد على مزود البيانات”.
على الرغم من أنه يجب استخدام المعلمة Filter
مع أمرات cmdlet أخرى مثل Get-Childitem
، على سبيل المثال، فإنه نادراً ما يتم استخدامها مع Test-Path
. إذا وجدت استخدامًا جيدًا لمعلمة Filter
، يرجى التواصل عبر تويتر على @adbertram.
ذات الصلة: Get-ChildItem: قائمة الملفات والسجل والشهادة والمزيد كواحد
NewerThan
هل سبق لك أن احتجت إلى التحقق من الطابع الزمني على ملف واتخاذ قرار بناءً عليه؟ إذا كان الأمر كذلك، فإن معلمات NewerThan
و OlderThan
توفر الكثير من الشفرة. تحقق معلمة NewerThan
ما إذا كان طابع الزمن للعنصر أحدث من تاريخ معين.
تقبل معلمة NewerThan
سلسلة نصية أو كائن DateTime لتمثيل الطابع الزمني الذي يجب فحصه. على سبيل المثال، للتحقق ما إذا كان الملف C:\Foo\bar.txt تم إنشاؤه بعد 20 يناير 2021، يجب عليك تشغيل Test-Path
كما في الأسفل.
OlderThan
معلمة OlderThan
تمامًا كما في NewerThan
لكن بالعكس. هذه المعلمة تتحقق ما إذا كان العنصر أقدم من تاريخ معين.
IsValid
إذا كنت قد بنيت مسارًا ديناميكيًا في سكريبت، فستعرف التحدي. أحيانًا قد تخطئ في إدخال حرف أو تحصل بطريقة ما على حرف خاص في المسار؛ إذا كان الأمر كذلك، فإن معلمة IsValid
مناسبة لك.
معلمة IsValid
هي معلمة فريدة تحول Test-Path
، ليس إلى cmdlet يتحقق من وجود عنصر، ولكن إلى واحد يتحقق من صيغة المسار. تؤكد هذه المعلمة ما إذا كان المسار صالحًا أم لا فقط.
بمثال، ربما تحتاج إلى التحقق مما إذا كان المسار صحيحًا بصورة تركيبية. أنت تعمل مع مجموعة من المتغيرات وتقوم بدمجها لبناء مسار.
عند دمج المسارات، استخدم دائمًا cmdlet
Join-Path
. هذا مثال فقط لأغراض التوضيح!
الآن لضمان أن المسار الذي قمت بإنشاءه ديناميكيًا صحيح، استخدم معامل IsValid
كما في الأسفل. ستجد أن Test-Path
يعيد False
.
المسار abc:dffC:\
ليس مسارًا صحيحًا الآن مما يتيح لك إنشاء روتين التحقق من الصحة في هذا السياق.
إذا كنت تستخدم PowerShell v6.1.2 أو أقدم وتستخدم معاملي
IsValid
وPathType
معًا، سيتجاهلTest-Path
معاملPathType
.
Credential
على الرغم من وجود معامل Credential
على cmdlet Test-Path
، قد تعتقد أنه يمكنك استخدامه للمصادقة على محركات PS كمستخدم آخر. هذا افتراض صحيح، ولكنه خاطئ.
للأسف، لا يقوم معامل Credential
بكثير مع cmdlet Test-Path
. توصي Microsoft باستخدام cmdlet Invoke-Command
واستخدام معامل Credential
هناك إذا كنت ترغب في استدعاء Test-Path
باستخدام اعتمادات بديلة.