האם אתה משתמש ב-PowerShell כדי ליצור, לקרוא, לעדכן ולמחוק קבצים? אם כן, ייתכן שחווית שגיאות כאשר הקבצים המטרה לא קיימים או כבר קיימים. מזל טוב לך, ישנן דרכים ב-PowerShell לבדוק האם קובץ קיים לפני שמתבצע פעולה כלשהי עליו.
לדוגמה, במקום לאפשר לקוד שלך ליצור את הקובץ מיד, נכון לבדוק האם הקובץ כבר קיים. כפי שמוצג בתמונה למטה, תוכל לכתוב קוד יותר טוב ולהשיג פלט ברור.

במאמר זה, תלמד את הדרכים השונות להשתמש ב-PowerShell לבדיקת קיום של קובץ. תלמד גם איך להשתמש בכל אחת מהדרכים אלו כדי ליצור קוד יותר טוב ותוצאות עם לוגיקת טיפול בשגיאות.
דרישות מקדימות
להפחתת שיחות לשולחן העזר ועדכון של פרטי כניסה למשתמשים מרוחקים אף כאשר אינם מחוברים ל-VPN עם פתרון לאיפוס סיסמה בשירות עצמי. קבל הדגמה של Specops uReset!
מאמר זה הוא מדריך שבו תלמד מדוגמאות שונות. וכדי לעקוב אחרי הדוגמאות, יידרשו אליך התקנים הבאים:
- עורך קוד. המומלץ הם Visual Studio Code ו־Atom, אשר פועלים במגוון פלטפורמות. תוכל גם להשתמש ב-Windows PowerShell ISE אם אתה עובד על מחשב במערכת הפעלה Windows.
- Windows PowerShell 5.1 (שולחן עבודה) או PowerShell 7.1 (ליבה). הפקודות והתסריטים במאמר זה חלים על שני המהדורות של PowerShell. בין אם אתה משתמש ב-Windows, Linux או macOS, תהיה בסדר כל עוד יש לך את PowerShell מותקן.
קשור: איך להוריד ולהתקין את PowerShell 7 על Windows, Linux ו-macOS
שימוש ב-PowerShell לבדיקת קיום קובץ
מאמר זה מכסה שלושה אמצעים לשימוש ב-PowerShell לבדיקת קיום קובץ. השימוש בשלושת האמצעים הללו שונה, אך המושג והמטרה הסופית זהים. שלושת הדרכים הן:
Test-Path
Cmdlet.Get-Item
ו-Get-ChildItem
Cmdlet.System.IO.File
Class.
יהיו דוגמאות ודמויות לכל אחת משלושת השיטות אלו, כולל איך להשתמש בהם עם טיפול בשגיאות.
שימוש ב-Test-Path
הדרך הראשונה היא באמצעות ה-cmdlet Test-Path
, המיועד במיוחד לקבוע האם נתיב או קובץ קיימים. בעת השימוש ב-cmdlet זה כדי לבדוק אם קובץ קיים, התוצאה היא true או false. התוצאה מציינת האם הקובץ קיים או לא.
להלן התחביר הבסיסי כדי להשתמש ב-cmdlet Test-Path
לבדיקת קובץ.
לדוגמה, אם תרצה לבדוק האם קובץ בשם C:\temp\important_file.txt קיים, ניתן להשתמש בקוד הבא. שים לב שחלק ה--PathType Leaf
אומר ל-cmdlet לבדוק אם זהו קובץ ולא ספרייה באופן ספציפי.
כאשר אתה מפעיל את הפקודה בפוורשל, התוצאה תחזיר True אם הקובץ קיים. במקרה אחר, התוצאה תהיה False, כפי שניתן לראות בתמונה מטה.

נושא קשור: איך להשתמש ב-cmdlet Test-Path של PowerShell
דוגמה: יצירת קובץ אם הקובץ לא קיים
דוגמה זו היא תרחיש טיפוסי ליצירת קבצים במקום מסוים. כדי למנוע את השגיאה "הקובץ כבר קיים", התסריט בודק האם הקובץ כבר קיים לפני שיוצר אותו. אם הקובץ קיים, התסריט מציג הודעה ואינו מנסה ליצור את הקובץ שוב.
העתק את הקוד למטה ושמור אותו בקובץ בשם Create-NewFile.ps1. ודא ששינית את ערך המשתנה $path
אם תרצה לשנות את מיקום הקובץ המוצג. לאחר שמירת התסריט, הפעל אותו בפוורשל לבדיקה.
התמונה למטה מראה שני פלטים שונים. הראשון הוא בעת הרצת התסריט כאשר הקובץ לא קיים. השני הוא לאחר יצירת הקובץ, כאשר הקובץ כבר קיים.

קשור: חזרה לבסיסים: איך להריץ סקריפט PowerShell
שימוש ב-Get-Item ו-Get-ChildItem
מטרת פקודת ה-Get-Item
היא ל- לקבל את הפריט במיקום מסוים. להשוואה, פקודת ה-Get-ChildItem
היא ל- לקבל את הפריטים והפריטים הילדים במקומות מסוימים. פונקציונליותם של שתי הפקודות אינה באופן מפורש לבדיקה אם קבצים קיימים.
מה קורה כאשר אתה משתמש ב-Get-Item
או Get-ChildItem
כדי לקבל פריט שאינו קיים? תקבל שגיאה עבור כל קובץ שחסר. קח את הפקודות לדוגמה למטה.
נניח שהקובץ c:\temp\important_file.txt אינו קיים. כל אחת מהפקודות למעלה מחזירה שגיאה. כפי שניתן לראות מהדוגמה למטה, הודעת השגיאה עבור שתי הפקודות זהה.

דוגמה: ארכוב הקובץ הקיים ויצירת קובץ חדש
בדוגמה זו, התסריט משתמש בפקודות Get-Item
ו-Test-Path
. לוגיקת התסריט היא לעשות את הבא:
- נסה האם תיקיית הארכיון קיימת באמצעות
Test-Path
:- אם תיקיית הארכיון אינה קיימת, הסקריפט יצור תיקיית ארכיון חדשה בפורמט הבא –
yyyy-MMM-dd_hh-mm-ss-tt
. - לאחר מכן, הסקריפט יעביר את הקובץ הישן לתיקיית הארכיון.
- אם תיקיית הארכיון אינה קיימת, הסקריפט יצור תיקיית ארכיון חדשה בפורמט הבא –
- בדוק האם הקובץ כבר קיים באמצעות
Get-Item
:- אם הקובץ קיים, הסקריפט יעביר אותו לתיקיית הארכיון תחילה. לאחר מכן, הסקריפט ייצור את הקובץ החדש במיקום המקורי.
- אם הקובץ לא קיים, הסקריפט ייצור את הקובץ החדש.
העתק את הקוד למטה ושמור אותו כ-Create-NewFileAfterArchive.ps1. לאחר שמירת הסקריפט, הפעל אותו ב-PowerShell ווודא את התוצאות.
טיפ: הפרמטר
-ErrorAction Ignore
משתיק את השגיאה (לא תופיע בקונסולה) וגם לא מקליט את השגיאה במשתנה האוטומטי$error
.
בתמונת המסך למטה, ריצת התסריט הראשון יצרה את הקובץ c:\temp\important_file.txt. הרצות התסריט הבאות יצרו תיק ארכיב חדש בכל פעם, מעבירות את הקובץ הקיים לתיק הארכיב, ואז יוצרות קובץ חדש ב- c:\temp\important_file.txt.

שימוש בשיטת .NET [System.IO.File]::Exists()
השיטה האחרונה ללמוד במאמר זה היא מחלקת ה-.NET System.IO.File, במיוחד השיטה Exists()
. אחת מהיתרונות של PowerShell היא היכולת שלו לייבא ולהשתמש במחלקות ובשיטות מ-.NET.
לדוגמה, כדי להשתמש בשיטה Exists()
ב-PowerShell כדי לבדוק אם קובץ קיים, השתמש בקוד הבא.
השיטה לעיל מחזירה תוצאה בוליאנית – true או false. אם התוצאה מחזירה true, זה אומר שהקובץ היעד קיים. להפך, התוצאה המוחזרת היא false כאשר הקובץ היעד לא קיים.
בקוד הדוגמה למטה, הפקודה בודקת אם הקובץ היעד קיים בנתיב c:\temp\important_file.txt.
כפי שניתן לראות מהתוצאה למטה, התוצאה מחזירה true, מאשרת כי הקובץ קיים.

עם שיטת .NET זו, ניתן גם להשתמש בפעולות טרנרי כמו בדוגמה למטה. במקום להציג את התוצאות הברירתיות של true או false, ניתן להתאים את הודעת התוצאה עם יישום קצר יותר. אך, אופרטור ה-טרנרי בדוגמה זו תקף רק ב-PowerShell 7+.
דוגמה: עדכון תוכן הקובץ אם הקובץ קיים
סקריפט הדוגמה זה מעדכן את קובץ הטקסט על ידי הוספת ערך GUID חדש. אך, עדכון התוכן מתרחש רק אם הקובץ קיים. להפך, הסקריפט מציג הודעה ואינו עושה כלום נוסף.
העתק את הסקריפט למטה ושמור אותו בשם Update-FileContents.ps1. שנה את ערך הנתיב של משתנה $file
אם נדרש. לאחר מכן הרץ את הסקריפט ב-PowerShell כדי לבדוק.
ניתן לראות בתמונת המסך למטה, הסקריפט עדכן את הקובץ במהלך כל הפעלה. העדכון קרה מכיוון ששיטת [System.IO.File]::Exists()
אישרה כי הקובץ c:\temp\important_file.txt קיים.
לבסוף, באמצעות הפקודה gc c:\temp\important_file.txt
לקרוא את תוכן הקובץ אושר כי הסקריפט עדכן את הקובץ עם ערכי GUID.

קשור: שימוש בסוגי נתונים מואצלים של PowerShell כדי להאיץ את הקידוד
מסקנה
הפחת שיחות לשולחן השירות & עדכן אישורי מטמון למשתמשים חיצוניים אפילו מחוץ ל-VPN עם פתרון לאיפוס סיסמא עצמי. קבל דמו של Specops uReset!
במאמר זה, למדת כי יש יותר מדרך אחת להשתמש ב-PowerShell כדי לבדוק אם קובץ קיים. זו שיטה טובה לבדוק את קיומו של קובץ לפני לבצע שינויים הקשורים לקובץ.
אתה למדת על שימוש ב- cmdlets Get-Item
, Get-ChildItem
, ו- Test-Path
. וגם על השיטה [System.IO.File]::Exists() .NET
. הדוגמאות הראו לך כיצד להשתמש בטכניקות וכיצד לשלב אותן עם לוגיקת טיפול בשגיאות.
תפסיק לסבול מהודעות שגיאה אלו. נצח אותן על ידי הוספת קוד לבדיקה אם קובץ קיים לפני כל פעולה הקשורה לקובץ. הטכניקות שלמדת כאן מכסות רק את היסודות, וכעת זה עליך לשדרג אותן.
Source:
https://adamtheautomator.com/powershell-check-if-file-exists/