זכור את ימי ה-DOS הטובים עם פקודת dir
? ומה עם פקודת ה-Linux ls
? אם כן, אז Get-ChildItem היא בעצם אותו דבר, אבל קצת מתקדמת יותר.
למעשה, יש לנו אף את dir
ו-ls
ב-PowerShell בצורת כינוי. פקודת ה-cmdlet של PowerShell, Get-ChildItem, יכולה לרשום לא רק קבצים ותיקיות במערכת קבצים דרך קונסולת ה-PowerShell או סקריפט PowerShell, אלא גם לרשום מפתחות רישום וערכים, תעודות בכמה חנויות תעודות שונות ואף ב-Active Directory, לדוגמה.
אם אתה מתחיל או בינוני בתכנות ב-PowerShell, הקפיצה לקורס המיני החינמי שלי על בניית כלי PowerShell היא חובה! מעל 9,000 מילים של הסבר עמוק ותובנות על איך לבנות כלי PowerShell.
כדי להבין את Get-ChildItem, תחשוב על זה בהקשר של dir
ו-ls
, אך במקום לראות רק קבצים, הוא עושה זאת עם אובייקטים רבים כילדים ומספר אותם. ניתן להשתמש בכינוי או בשם הפקודה המלא כדי להשתמש בזה.
מאחר ופקודה זו זמינה מגרסה 1 של PowerShell, תוכל להיות בטוח שהיא תעבוד עם גרסת 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
מיקרוסופט הבינו שניווט במבנה כמו "עץ" של מערכת קבצים ניתן ליישם גם במערכות אחרות. מערכת קבצים "עץ" מכילה תיקיות וקבצים, אך רישום מכיל מפתחות וערכים, בעוד שמערכת האישורים בווינדוס מכילה חנויות ואישורים בתוך חנויות אלו. כל אחת מאזורים אלו יכולה להיות מיוצגת כעץ ולכן נוצר ספק פוורשל. למה כל הדיבור הזה על ספקי פוורשל? מכיוון שפקודת ה-Get-ChilldItem
היא חלק מפקודות ה-*-Item שמתמידות עם מנועי פוורשל שכל ספק חושף.
פקודת ה-Get-ChildItem
יכולה להוציא כל מספר של אובייקטים במנוע פוורשל ומאפשרת לך לעבד כל פריט דרך הצינור או אולי בלולאת foreach בפוורשל. היא מבינה את המושג של מנוע פוורשל שמאפשר לך לציין Path
של תיקיית מערכת קבצים, מפתח רישום או חנות אישורים כל באחת.
ניתן לראות למטה כי הפקודה הזו יכולה לספור את תיקיית ה-C:\, מערך HKEY Current User וגם את חנות אישורי הפוורשל.
סינון
הפקודה Get-ChildItem
ב-PowerShell לא יכולה רק למשוך את כל האובייקטים במערכת הגיבוי אלא שיכולה גם לסנן את המידע דרך מספר פרמטרים שונים: Filter
, Include
ו־Exclude
. תמיד כדאי להשתמש בפרמטר הנפוץ של PowerShell, Filter
, כאשר יש אפשרות. פרמטר זה מעביר ישירות את תחביר הסינון לספק הפרט. אף על פי שזה מהיר יותר, תחביר זה תלוי רק בספק הנדרש.
לדוגמה, תחביר של Filter
עם Name -eq 'foo'
יכול להיות לגמרי בסדר כאשר מתבצע חיפוש בקבצים, אך לא יעבוד בכלל כאשר מתבצע חיפוש ברשומות הרגיסטריים מכיוון שספק הרגיסטריים אין בכלל פרמטר סינון!
בכל מקרה, כשכל התחבירים נכשלים, ישנם תמיד את הפרמטרים Include
ו־Exclude
.
הפקודה ב-PowerShell מכילה גם כמה פרמטרים הקשורים למערכת הקבצים, כמו Force
המציג גם קבצים ותיקיות מוסתרים, ו־File
ו־Directory
שמוצאים רק קבצים או תיקיות. ניתן למצוא את כל הפרטים בפקודה Get-ChildItem
באמצעות Get-Help
או ב-מסמכי Microsoft.
דבר נוסף מעניין על Get-ChildItem
הוא יכולתו לפתור נתיבים בשימוש בתו הכללי. ב-PowerShell, תו הכללי מייצג בדרך כלל כל דבר. לדוגמה, אם ברצונך לראות את כל הקבצים עם סיומת .txt, פשוט ציין את הנתיב לתיקייה ואת *.txt
.
אנו יכולים גם לסנן לפי מאפייני קובץ. אולי נרצה למצוא רק את הקבצים שנקראים בלבד בתיקייה כלשהי.
סיכום
פקודת ה-PowerShell הזו היא אחת מהפקודות שתשתמש בהן מחדש. ברוב הזמן, כנראה תשתמש בספק המערכת הקובץ, אך חשוב לזכור שהפקודה הזו מסוגלת לעשות הרבה יותר. ניתן להשתמש בה לשאילתת קבצים, תיקיות, מפתחות רישום, ערכי רישום, תעודות, משתמשים ב-Active Directory, מחשבים או אפילו משתני סביבה, פונקציות ועוד!
כשיש ספקולציה, הפעל את הפקודה Get-PSDrive
כדי לראות רשימה של כל הכוננים שטענת הפקודה Get-ChildItem
יכולה לשאול עבורך.