تذكر أيام DOS الجيدة مع أمر dir
؟ ماذا عن أمر Linux ls
؟ إذا كان الأمر كذلك، فإن Get-childItem هو في الأساس ذلك ولكن بمستوى أعلى.
في الواقع، لدينا حتى dir
و ls
في PowerShell في شكل اختصار. يمكن لأمر Get-Childitem في PowerShell ليس فقط قائمة الملفات والمجلدات على نظام الملفات عبر وحدة التحكم PowerShell أو نص PowerShell ولكن يمكنه أيضًا عداد مفاتيح السجل والقيم، والشهادات في مخازن الشهادات المختلفة وحتى Active Directory، لنذكر بعضها.
إذا كنت مبتدئًا/متوسطًا في كتابة السيناريوهات باستخدام PowerShell، تأكد من التحقق من دورتي المجانية عن بناء أداة PowerShell! أكثر من 9,000 كلمة تشرح وتقدم رؤى عميقة حول كيفية بناء أداة PowerShell.
لفهم Get-Childitem، أولاً، فكر فيه فيما يتعلق بأمر dir
و ls
ولكن بدلاً من الملفات فإنه يعامل العديد من الكائنات كعنصر فرعي ويعدها. يمكنك استخدام الاختصار أو اسم الأمر الكامل لاستخدامه.
نظرًا لأن هذا الأمر متاح منذ PowerShell v1، يمكنك التأكد من أنه سيعمل مع إصدار PowerShell الذي تستخدمه.
يعبر Get-ChildItem عن شجرة
A file system is a hierarchy. It has a folder structure with files inside of folders and those folders inside of other folders. A file system is like a tree. That tree has a trunk (C:\
for example) and “branches” coming off of it (folders). In fact, we even have a tree
command.
يمكنك توجيه هذا الأمر إما إلى مسارات محلية على الكمبيوتر المحلي، استخدام كتلة نص PowerShell عن بُعد واستخدام Get-ChildItem
في داخلها أو توجيهه إلى مسار UNC. كلها تعمل بنفس الطريقة. ربما أريد فقط قائمة بجميع الملفات في الدليل الحالي.
مزودات PowerShell
مايكروسوفت أدركت أن التنقل في هذه الهيكلية “شجرة” لنظام الملفات يمكن تطبيقه على أنظمة أخرى أيضًا. يحتوي نظام ملفات “شجرة” على مجلدات وملفات، ولكن السجل لديه مفاتيح وقيم بينما نظام الشهادات في ويندوز لديه متاجر وشهادات داخل تلك المتاجر. يمكن تمثيل كل من هذه المناطق الخاصة بشكل شجري، ومن هنا جاء مزود PowerShell. لماذا كل هذا الحديث عن مزودات PowerShell؟ لأن الأمر \texttt{Get-ChilldItem} جزء من الأوامر \texttt{*-Item} التي تتفاعل مع محركات PowerShell التي يعرض كل مزود منها.
يمكن للأمر \texttt{Get-ChildItem} إخراج أي عدد من الكائنات على محرك PowerShell ويتيح لك معالجة كل عنصر عبر الأنبوبة أو ربما في حلقة \texttt{foreach} في PowerShell. فهو يفهم مفهوم محرك PowerShell الذي يتيح لك تحديد مسار مجلد نظام ملفات أو مفتاح سجل أو مخزن شهادات كلها في مكان واحد.
يمكنك أن ترى أدناه أن هذا الأمر يمكنه فهرسة المجلد \diy5{C:\}، جذع HKEY Current User وكذلك مخزن شهادات PowerShell.
التصفية
لا يمكن لأمر الباورشيل Get-ChildItem
سحب الكائنات فقط على محرك أقراص ولكن يمكنه أيضًا تصفية المعلومات من خلال عدة معلمات مختلفة: Filter
، Include
و Exclude
. سترغب دائمًا في استخدام معلمة الباورشيل الواسعة الانتشار Filter
عند الإمكان. تمر هذه المعلمة مباشرة بصيغة التصفية إلى موفر الكائن الفردي. على الرغم من أن هذه الصيغة أسرع بكثير، فإن هذه الصيغة تعتمد بشكل كامل على موفر الذي يتم استعلامه.
على سبيل المثال، فإن صيغة Filter
Name -eq 'foo'
قد تكون مقبولة تمامًا عند الاستعلام عن الملفات ولكنها لن تعمل على الإطلاق عند الاستعلام عن التسجيل لأن موفر التسجيل ليس لديه حتى تصفية!
عندما يفشل كل شيء آخر، لديك دائمًا معلمتي Include
و Exclude
أيضًا.
يحتوي هذا الأمر في الباورشيل أيضًا على بعض المعلمات الخاصة بنظام الملفات مثل Force
الذي سيخرج الملفات والمجلدات الخفية، File
و Directory
التي تجد فقط الملفات أو المجلدات. تحقق من الكشف الكامل عن Get-ChildItem
من خلال Get-Help
أو في وثائق Microsoft.
شيء آخر رائع حول Get-ChildItem
هو قدرته على حل المسارات عند استخدام الحرف النجمي. في الباورشيل، يمثل الحرف النجمي عادة أي شيء. على سبيل المثال، إذا كنت ترغب في رؤية جميع الملفات بامتداد .txt، ما عليك سوى تحديد مسار المجلد و *.txt
.
يمكننا أيضًا تصفية حسب سمات الملفات. ربما نريد فقط العثور على الملفات القابلة للقراءة فقط في مجلد.
ملخص
هذا الأمر في PowerShell هو واحد من تلك الأوامر التي ستستخدمها بشكل متكرر. في معظم الأحيان، ستكون على الأرجح تستخدم مزود FileSystem، ولكن من المهم أن تتذكر أن هذا الأمر قادر على القيام بأشياء أكثر من ذلك. استخدمه للاستعلام عن الملفات، والمجلدات، ومفاتيح التسجيل، وقيم التسجيل، والشهادات، ومستخدمي Active Directory، والكمبيوترات، أو حتى المتغيرات البيئية، والوظائف وأكثر من ذلك!
عند الشك، قم بتشغيل الأمر Get-PSDrive
لرؤية قائمة بجميع الأقراص في PowerShell المحملة التي يمكن لأمر Get-ChildItem
الاستعلام عنها لك.