שימוש ב־PowerShell להגדיר משתני סביבת Windows, לקרוא משתנים סביבתיים וליצור משתני סביבה חדשים פשוט כאשר אתה יודע את התקליף. התקליפים שתלמדו במאמר זה יעבדו למשתני הסביבה של Windows 10 וגם לכל לקוח/שרת של Windows אחרי Windows 7 SP1/Windows Server 2008.
PowerShell מספקת דרכים רבות שונות להתממשק עם משתני סביבת Windows מה־PSDrive של $env:
, הרישום, וממחלקת ה־[System.Environment]
של .NET. תלמד על כל שיטה כולל הבנת הטווח של משתני הסביבה במדריך השלב אחר השלב הזה.
הנחות
במהלך המאמר הזה, אני אשתמש ב־Windows PowerShell 5.1 ב־Windows 10. אך אם יש לך גרסת Windows PowerShell שאחרי v3 על Windows 7 SP1 או מאוחר יותר, הטכניקות שאני עומד להראות אותך כנראה יעבדו היטב.
מהם משתני הסביבה?
משתני סביבה, כפי שמציינה השם, אוחסנים מידע על הסביבה שמשמש על ידי Windows ויישומים. משתני הסביבה ניתנים לגישה על ידי יישומים גרפיים כמו מערכת הפעלה של Windows ועורכי טקסט פשוטים כמו Notepad, וכן cmd.exe ו־PowerShell.
שימוש במשתני סביבה מסייע לך למנוע קידוד קשה של נתיבי קבצים, שמות משתמש או מחשב ועוד רבים בסקריפטים או במודולים שלך ב־PowerShell.
משתני סביבה נפוצים
כשאתה מתחיל ללמוד עוד על איך לעבוד עם משתני סביבת העבודה בפוורשל, תתקל במספר משתנים שונים. חלקם יותר שימושיים מאחרים. להלן רשימה של כמה מהמשתנים הסביבתיים הנפוצים ושימושם להפניה.
Variable | Usage |
---|---|
ClientName | The name of the remote computer connected via a Remote Desktop session. |
SessionName | This helps to identify if the current Windows session is regarded by the operating system as running at the console. For console sessions SessionName will be ‘Console’. Enhanced Session connections to Hyper-V Virtual Machines do not report SessionName as ‘Console’, whereas Standard Sessions do. |
ComputerName | The name of the computer. |
SystemRoot and Windir | The path to the current Windows installation. |
ProgramFiles and ProgramFiles(x86) | The default locations for x64 and x86 programs. |
ProgramW6432 | The default location for programs, avoiding 32/64 bit redirection. This variable only applies for 32 bit processes running on a 64 bit platform. This means that you can use it to identify when a 32 bit instance of PowerShell is running on a 64 bit system. |
UserDNSDomain | The Fully Qualified Domain Name of the Active Directory domain that the current user logged on to. Only present for domain logons. |
UserDomain | The NETBIOS-style name of the domain that the current user logged on to. Can be a computer name if there’s no domain. |
UserDomainRoamingProfile | The location of the central copy of the roaming profile for the user, if any. Only present for domain logons. |
UserName | The name of the currently logged on user. |
UserProfile | The location of the profile of the current user on the local computer. |
תחומי משתני הסביבה
יש שלושה תחומים של משתני סביבת העבודה. חשוב לחשוב על תחומים אלו כשכבות של משתנים שבנויים זה על פי זה כדי ליצור תמונה כוללת. ביחד, תחומים אלו מספקים מספר משתנים סביבתיים שונים לכל תהליך רץ בווינדוס.
היררכיה של תחום משתני הסביבה
כל אחד מה"שכבות" הללו או משלב או מתעלף אחד את השני. הם מוגדרים בהיררכיה כמו: מכונה –> משתמש –> תהליך עם כל משתנה בתחום מוגדר מחדש על ידי הורה התחום אם קיים משתנה בתחום ההורה.
לדוגמה, משתנה סביבתי נפוץ הוא TEMP
. משתנה זה אחסון את נתיב התיקייה לתיקיית הזמנית המקומית של חלונות. משתנה זה מוגדר ל:
C:\WINDOWS\TEMP
in the machine scopeC:\Users\<username>\AppData\Local\Temp
in the user scopeC:\Users\<username>\AppData\Local\Temp
in the process scope.
אם אין משתנה סביבתי TEMP
מוגדר בתחום ה משתמש אז התוצאה הסופית תהיה C:\WINDOWS\TEMP
.
סוגי תחומי משתני סביבת העבודה
יש שלושה סוגים שונים של תחומי משתני סביבת העבודה בווינדוס.
מכונה
משתני סביבת העבודה בתחום ה מכונה מקושרים להפעלת ווינדוס. כל חשבון משתמש יכול לקרוא אותם, אך הגדרה, שינוי או מחיקה דורשים הרשאות מלאות.
משתמש
קבועי סביבה בטווח ה־משתמש מקושרים למשתמש שמפעיל את התהליך הנוכחי. הקבועים של המשתמש דורסים על קבועים בטווח ה־מכונה-שמות דומים.
הערה: מיקרוסופט ממליצה שערכי קבועי הסביבה בטווחי המכונה והמשתמש לא יכילו יותר מ־2048 תווים.
תהליך
קבועי סביבה בטווח ה־תהליך הם שילוב של טווחי ה־מכונה וה־משתמש, יחד עם קבועים כמה שווים שווא שמיקרוסופט יוצרת דינמית.
למטה רשימה של קבועי הסביבה הזמינים לתהליך רץ. כל אלה הם נוצרים דינמית.
ALLUSERSPROFILE
APPDATA
COMPUTERNAME
HOMEDRIVE
HOMEPATH
LOCALAPPDATA
LOGONSERVER
PROMPT
PUBLIC
SESSION
SystemDrive
SystemRoot
USERDNSDOMAIN
USERDOMAIN
USERDOMAIN_ROAMINGPROFILE
USERNAME
USERPROFILE
קבועי סביבה ברגיסטר
קבועי הסביבה מאוחסנים בשני מקומות ברגיסטר, אחד עבור טווח המשתמש והשני עבור טווח המכונה.
אל תשתמש בריג'יסטר לניהול משתני סביבה
קיים בעיה כאשר יש שינויים במשתנים בתוך הריג'יסטר. כל תהליכים שרצים לא יראו שינויים במשתנים בריג'יסטר. התהליכים יראו רק את המשתנים והערכים בריג'יסטר שהיו קיימים כאשר התהליך התחיל, אלא אם וינדוס יודיע להם שהייתה שינוי.
במקום לשנות ישירות את הריג'יסטר, אפשר להשתמש במחלקת .NET במקום זאת. מחלקת ה-.NET [System.Environment]
יכולה לשנות משתני סביבה של מכונה ומשתמש–ובאה לידי ביטוי בניהול הריג'יסטר עבורך.
שינוי של משתני סביבה בריג'יסטר ישירות, גם אם אפשרי, אינו הגיוני. המחלקה של .NET מציעה גישה פשוטה יותר, נתמכת על ידי מיקרוסופט. תלמד על שימוש במחלקת .NET [System.Environment]
מאוחר יותר במאמר זה.
מיקום הריג'יסטר של משתני סביבה ושאילתה
I hope you’ve been convinced to not modify the registry directly but if you’d like to take a peek at what’s in there, you can find all user environment variables in the HKEY_CURRENT_USER\Environment
key. Machine-scoped environment variables are stored at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
.
בתוך אחד מהמפתחות הללו יש ערכי ריג'יסטר מסוג REG_SZ
או REG_EXPAND_SZ
. ערכי REG_EXPAND_SZ
מחזיקים משתני סביבה מוטבעים כחלק מערכת הערך שלהם. משתני סביבה אלו מתרחבים כאשר הערך נאסף.
כדי להדגים זאת, ניתן להשתמש בכלי ה-REG
. זהו יישום קטן בשורת פקודה הכלול עם חלונות.
עיין במשתנה הסביבה TEMP
כפי שנראה למטה. הרץ את REG
עם הפרמטר QUERY
כדי לאחזר את ערך משתנה הסביבה TEMP
.
לעיתים תראה משתני סביבה המוצגים מוקפים בסימני אחוז (
%COMPUTERNAME%
) כמו בדוגמה למעלה. זו הדרך הישנה להצגת משתני סביבה דרך cmd.exe וקבצי batch. ידעו ש-PowerShell אינה מזהה את הפורמט הזה.
הכלי REG
מאפשר לנו לראות את הערך המקורי של ערך המקור של הרישום. סוג הערך הוא REG_EXPAND_SZ
והערך מכיל את משתנה הסביבה %USERPROFILE%
.
אם ברצונך להשתמש ב-PowerShell כדי לאחזר את ערך הרישום, ניתן לעשות זאת באמצעות cmdlet Get-Item
כפי שמוצג למטה.
צפה וקבע משתני סביבה של Windows דרך ממשק משתמש גרפי
כדי לראות תצוגה גרפית של משתני סביבת המשתמש והמערכת, הרץ SystemPropertiesAdvanced.exe מ-PowerShell, מפקודת פרומפט או מ-Windows Key+R כדי להציג את לשונית ה-System Properties Advanced. לחץ על הכפתור EnvironmentVariables, המודגש בתמונה למטה.

תיבת דו-שיח של משתני הסביבה, כפי שמוצגת למטה, מאפשרת לך לצפות, ליצור ולשנות משתני סביבה של משתמש ושל מכונה. שים לב שהתיבה מתייחסת למשתנים שמוגדרים על רמת המכונה כ-משתנים מערכתיים.

עכשיו שיש לך הבנה של משתני הסביבה, בוא נעבור למה שבאת לכאן עבורו, ניהולם באמצעות PowerShell!
ישנם מספר דרכים שונות שבהן ניתן להתממשק עם משתני סביבת העבודה באמצעות PowerShell.
- ה- PSDrive וה-Provider Env: – מבוסס על ההפעלה. מגדיר את ערכי משתני סביבת העבודה רק עבור ההפעלה הנוכחית של PowerShell.
- משתנים $env: – מבוסס על ההפעלה. מגדיר את ערכי משתני סביבת העבודה רק עבור ההפעלה הנוכחית של PowerShell.
- ה- Class .NET [System.Environment] – מאפשר לך לשמור משתני סביבת משתמש ושל מערכת באופן חותם על מסעיפים וטעינות מחדש.
ה- PSDrive וה-Provider Env:
אחת מדרכי הקריאה הטובות ביותר לקרוא למשתני סביבת העבודה היא רעיון של PowerShell שמוכר בשם מנהלי ההתקנים של PowerShell (PS drives). מנהל ההתקנים PS מאפשר לך לטפל במשתני סביבת העבודה כאילו הם מערכת קבצים דרך ההתקן Env:.
עבור להתקן Env:
כמו כל מנהלי התקנים של PowerShell, אתה מפנה אליו באמצעות נתיבים כמו Env:\TEMP, Env:\COMPUTERNAME, וכו'. אך כדי לחסוך מספר פעוט של מקשים, עבור להתקן Env: בדיוק כמו שתעשה עם כל מנהלי התקנים, כפי שמוצג למטה.
השלמת טאב עם התקן Env:
ניתן להשתמש באותם פקודות שתשתמש בהן כדי לגשת למערכת הקבצים, כמו Get-Item
ו־Get-ChildItem
כדי לגשת למשתני סביבת העבודה. אך במקום מערכת הקבצים, אתה קורא את ה־Env:
drive.
מאחר ומשתני סביבת העבודה מאוחסנים ב־PS drive, ניתן להשתמש בתכונת ההשלמה באמצעות PowerShell כדי לעבור בין המשתנים הזמינים, כפי שמוצג למטה.

עכשיו נקפוץ לתוך כמה דוגמאות של איך ניתן להשתמש ב־Env:
PS drive כדי לעבוד עם משתני סביבת העבודה.
רישום של משתני סביבת העבודה עם Env:
רישום של משתני סביבת העבודה באמצעות כרטיסייה עם Env:
מציאת ערך של משתני סביבת העבודה עם Env:
תוצאות הפקודות הללו הן אובייקטים .NET של ציוני מפתח/ערך [System.Collections.DictionaryEntry]
. אובייקטים אלה מחזיקים את שם משתני הסביבה במאפיין Name
ואת הערך במאפיין Value
.
ניתן לגשת לערך מסוים של משתנה סביבת העבודה על ידי לעטוף את ההפניה לפקודת Get-Item
בסוגריים ולהתייחס למאפיין Value
כפי שמוצג למטה:
כאשר נתקלים במצבים בהם רק צריך להחזיר משתני סביבה מסוימים, ניתן להשתמש ב- cmdlets הסטנדרטיים של PowerShell כגון Select-Object
ו- Where-Object
כדי לבחור ולסנן את הפריטים שיוחזרו על ידי ספק ה- Env:
.
בדוגמה שלמטה, רק המשתנה הסביבתי COMPUTERNAME
מוחזר.
כאפשרות אחרת, ניתן להשתמש ב- cmdlet של Get-Content
. פקודה זו מחזירה אובייקט מסוג [String]
המכיל את ערך המשתנה הסביבתי. האובייקט הזה פשוט יותר להתמודדות עימו מאשר אובייקט עם מאפייני Name
ו- Value
.
דוגמה: הכנסת ערכי סביבת משתמש לתוך מחרוזת
באמצעות Get-Content
, ניתן למצוא את ערך המשתנה הסביבתי ולהכניס את המשתנה הסביבתי COMPUTERNAME
, לדוגמה, לתוך מחרוזת טקסט.
יצירת משתנה סביבה (והגדרה) באמצעות Env:
ניתן ליצור משתנים סביבה חדשים באמצעות PowerShell באמצעות ה- cmdlet של New-Item
. יש לספק את שם המשתנה הסביבתי בצורת Env:\<EnvVarName>
לפרמטר של Name
ואת ערך המשתנה הסביבתי לפרמטר של Value
כפי שמוצג למטה.
השתמש בפקודת Set-Item
כדי להגדיר משתנה סביבה, או ליצור אחד חדש אם הוא עדיין לא קיים. אתה יכול לראות מטה באמצעות פקודת Set-Item
, אתה יכול ליצור או לשנות את הערך של משתנה סביבה.
העתקת משתנה סביבה עם Env:
לעיתים קרות המצב בו יש צורך לשכפל את ערך המשתנה בסביבת העבודה. תוכל לעשות זאת באמצעות הפקודה Copy-Item
.
למטה תראה שערך המשתנה COMPUTERNAME
מועתק ל-MYCOMPUTER
, וכתוצאה מכך מחליף את הערך הקיים שלו.
הסרת משתנה סביבה עם Env:
יתכנו מצבים בהם משתנה סביבת העבודה כבר אינו נדרש. תוכל להסיר משתני סביבה באמצעות אחת משלוש שיטות:
- להשתמש בפקודת
Set-Item
כדי להגדיר משתנה סביבה לערך ריק
- להשתמש בפקודת
Remove-Item
.
- להשתמש בפקודת
Clear-Item
.
שינוי שם של משתנה סביבת העבודה עם Env:
במצבים בהם שם משתנה סביבת העבודה צריך להשתנות, יש לך את האפשרות לשנות את השם, במקום למחוק וליצור מחדש עם ספק Env:
.
השתמש ב־Rename-Item
cmdlet כדי לשנות את שם משתנה הסביבה תוך שמירה על ערכו. למטה ניתן לראות כי ניתן לראות כי משתנה הסביבה MYCOMPUTER
משויך מחדש ל־OLDCOMPUTER
תוך שמירה על ערכו.
$Env:
Variables
לאחר שהתמסרת לנהיגת ה־Env:
כדי להתייחס למשתני סביבה כקבצים, בסעיף זה אנו מראים כיצד להתייחס אליהם כמשתנים. דרך נוספת לנהל משתני סביבה במהלך ההפעלה היא באמצעות ה־PowerShell Expression Parser. התכונה הזו מאפשרת לך להשתמש בטווח ה־$Env:
כדי לגשת אל משתני הסביבה.
קבלת משתנה סביבה עם $Env:
באמצעות הטווח $Env
, אפשר להתייחס ישירות אל משתני הסביבה מבלי להשתמש בפקודה כמו Get-Item
, כפי שמודגם למטה.
שיטה זו נותנת לך אפשרות להכניס משתני סביבה לתוך מחרוזות כמו שמוצג למטה:
הגדרת או יצירת משתנה סביבה עם $Env:
הגדרת משתנה סביבה באמצעות השיטה הזו היא ישירה. זה גם ייצור משתנה סביבה חדש אם הוא עדיין לא קיים כמו שמוצג למטה.
השתמש בתחביר +=
כדי להוסיף לערך קיים, במקום לדרוס אותו.
הסרת משתנה סביבה עם $Env:
כדי להסיר משתנה סביבה באמצעות השיטה הזו, פשוט הגדר את ערכו למחרוזת ריקה.
שימוש במחלקת .NET [System.Environment]
מחלקת .NET [System.Environment]
מציעה שיטות לקבלת והגדרת משתני סביבת עבודה גם. זהו הדרך היחידה לגישה ישירה לסביבת העבודה השונות ולהגדרת משתני סביבה השורדים בין הסשנים של PowerShell.
בכל הדוגמאות הבאות, במידה ולא צוין טווח, הננו מניחים טווח תהליך.
בעת השימוש ב־[System.Environment]
, תשתמש בכמה שיטות של מחלקת .NET סטטיות. אין צורך להבין מהו שיטת סטטית. עליך רק להבין שכדי להשתמש בכל אחת מהטכניקות שאתה עומד ללמוד, עליך תחילה להתייחס למחלקה ( [System.Environment]
) ולאחר מכן לשתי נקודותיים ( ::
) ואז לשיטה.
רישום של משתני סביבת העבודה עם [System.Environment]
אם ברצונך לראות את כל משתני הסביבה בטווח מסוים, תשתמש בשיטת GetEnvironmentVariables
. שיטה זו מחזירה את כל משתני הסביבה לפי הטווח שצוין כארגומנט של השיטה (בסוגריים).
קבלת משתנים יחידים של סביבת העבודה עם [System.Environment]
אם נדרש למצוא משתנה סביבת עבודה מסוים, ניתן לעשות זאת בשני דרכים שונות.
GetEnvironmentVariables().<שם משתנה>
– לא מומלץGetEnvironmentVariable('<שם משתנה>','<תחום>')
GetEnvironmentVariables()
באמצעות שיטת GetEnvironmentVariables()
, אתה משתמש בתיוגי נקודה להפניה לערך. סגור את ההפניה למחלקת [System.Environment]
ולקריאה של השיטה הסטטית בסוגריים, ואז המשך עם נקודה ושם המשתנה הסביבתי כמו בדוגמה הבאה:
שים לב שכאשר אתה מפנה למשתנים סביבתיים בדרך זו, עליך לוודא שאתה מתאים לרישיות האותיות! בדוגמה למעלה, נסה לקרוא למשתנה
APPDATA
באמצעותappdata
. השתמש ב-GetEnvironmentVariable()
במקום זאת.
GetEnvironmentVariable()
במקום להשתמש בשיטת GetEnvironmentVariables()
, השתמש במקום ב- GetEnvironmentVariable()
כדי למצוא משתנים סביבתיים יחידים. זה מתגבר על בעיה ברישיות האותיות וגם מאפשר לך לציין את התחום.
כדי להשתמש בשיטה זו, ציין את שם המשתנה הסביבתי ואת התחום שבו אתה רוצה לחפש את המשתנה הזה מופרדים בפסיק.
הגדרת משתנה סביבתי עם [System.Environment]
השתמש בשיטת SetEnvironmentVariable()
כדי להגדיר את ערך המשתנה הסביבתי לתחום הנתון, או ליצור משתנה חדש אם הוא עדיין לא קיים.
כאשר אתה מגדיר משתנים בקצובת התהליך, תגלה כי קצובת התהליך היא דומה למשתנים, בעוד ששינויים בקצובות המשתמש והמכונה הם קבעים.
הערה: קריאה לשיטת SetEnvironmentVariable עם שם משתנה או ערך של 32767 תווים ומעלה עשויה לגרום לחריגה להופיע.
הסרת משתנה סביבתי עם [System.Environment]
השתמש בשיטת SetEnvironmentVariable()
כדי להסיר משתנה סביבתי עבור הקצובה הנתונה על ידי הגדרת הערך שלו למחרוזת ריקה.
משתנים סביבתיים שימושיים ב- PowerShell
כמו הרבה יישומי Windows אחרים, יש ל-PowerShell משתנים סביבתיים משל עצמו. שני משתנים סביבתיים שימושיים לדעתך הם PSExecutionPolicyPreference
ו־PSModulePath
.
PSExecutionPolicyPreference
המשתנה הסביבתי PSExecutionPolicyPreference
אוחסן את מדיניות הביצוע הנוכחית של PowerShell. הוא נוצר אם מדיניות ביצוע ספציפית להקצאה נקבעת על ידי:
- הרצת פקודת Set-ExecutionPolicy עם פרמטר Scope של Process
- הרצת התוכנית powershell.exe להתחלת הסשן, באמצעות פרמטר שורת הפקודה ExecutionPolicy להגדיר מדיניות לסשן.
PSModulePath
המשתנה הסביבתי PSModulePath
מכיל את הנתיב שבו PowerShell מחפשת מודולים אם אינך מציין נתיב מלא. הוא מיוצג בדיוק כמו המשתנה הסביבתי התקני PATH
, עם נתיבי תיקיות יחידים מופרדים באמצעות נקודה ופסיק.
טיפ מהיר: פצל כל תיקייה כדי לקבל מערך מחרוזות כדי לעבד כל נתיב בנפרד באמצעות $env:PSModulePath.split(';')
סיכום
משתנים סביבתיים הם אמצעי שימושי לקבלת מידע על מערכת רצה, או לאחסון מידע בין ההפעלות והאתחולים. בין שאתה רק קורא את המשתנים הסביבתיים המוגדרים כבר במערכת ההפעלה של Windows ויוצר את שלך, עכשיו אתה יכול לנהל אותם באמצעות מגוון דרכים באמצעות PowerShell!
קריאה נוספת
- about_Environment_Variables
- המחלקה .NET [System.Environment] Class במסמכי Microsoft
- למידה על פורמט מחרוזת PowerShell והרחבת מחרוזות
Source:
https://adamtheautomator.com/powershell-environment-variables/