باستخدام PowerShell لتعيين متغيرات بيئة Windows وقراءة متغيرات البيئة وإنشاء متغيرات بيئة جديدة سهل بمجرد معرفة الحيلة. ستعمل الحيل التي ستتعلمها في هذه المقالة لمتغيرات بيئة Windows 10 وأي عميل / خادم Windows بعد Windows 7 SP1 / Windows Server 2008.
يوفر PowerShell العديد من الطرق المختلفة للتفاعل مع متغيرات بيئة Windows من محرك الأقراص $env:
، والسجل ، وفئة .NET [System.Environment]
. ستتعرف على كل طريقة بما في ذلك فهم نطاق متغيرات البيئة في هذا الدليل التفصيلي خطوة بخطوة.
افتراضات
طوال هذه المقالة ، سأستخدم Windows PowerShell 5.1 على Windows 10. ولكن إذا كان لديك أي إصدار من Windows PowerShell بعد v3 على Windows 7 SP1 أو بعد ذلك ، يجب أن تعمل التقنيات التي سأعرضها بشكل جيد.
ما هي متغيرات البيئة؟
تخزن متغيرات البيئة ، كما يوحي الاسم ، معلومات حول البيئة التي يتم استخدامها بواسطة Windows والتطبيقات. يمكن الوصول إلى متغيرات البيئة من التطبيقات الرسومية مثل مستكشف Windows ومحررات النص العادية مثل Notepad ، بالإضافة إلى cmd.exe و PowerShell.
يساعد استخدام متغيرات البيئة على تجنب إدخال المسارات الثابتة بشكل صريح ، أو أسماء المستخدمين أو أجهزة الكمبيوتر وغير ذلك الكثير في نصوص أو وحدات 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. |
نطاقات المتغيرات البيئية
هناك ثلاثة نطاقات للمتغيرات البيئية. فكر في النطاقات كطبقات من المتغيرات تبني صورة كاملة. مجتمعة، توفر هذه “الطبقات” العديد من المتغيرات البيئية المختلفة لأي عملية تعمل في نظام التشغيل Windows.
التسلسل الهرمي لنطاقات المتغيرات البيئية
كل من هذه “الطبقات” إما تجمع أو تستبدل بعضها البعض. يتم تعريفها في تسلسل هرمي مثل: جهاز –> مستخدم –> عملية حيث يتم استبدال المتغير المحدد في النطاق الأعلى بالمتغير المحدد في النطاق الأدنى إذا كان هناك متغير في النطاق الأعلى.
على سبيل المثال، متغير البيئة الشائع هو TEMP
. يقوم هذا المتغير بتخزين مسار المجلد إلى المجلد المؤقت المحلي في نظام التشغيل Windows. يتم تعيين هذا المتغير البيئي على:
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
.
أنواع نطاقات المتغيرات البيئية
هناك ثلاثة أنواع مختلفة لنطاقات المتغيرات البيئية في نظام التشغيل Windows.
جهاز
المتغيرات البيئية في نطاق الـ جهاز مرتبطة بنسخة نظام التشغيل الحالية. يمكن لأي حساب مستخدم قراءتها، ولكن يجب أن يتم تعيينها أو تغييرها أو حذفها بامتيازات مرتفعة.
المستخدم
ترتبط المتغيرات البيئية في نطاق المستخدم user مع المستخدم الذي يقوم بتشغيل العملية الحالية. تكتب متغيرات المستخدم المستخدم فوق المتغيرات ذات النطاق المحدد بالجهاز الجهاز- التي تحمل نفس الاسم.
ملاحظة: توصي Microsoft بأن تحتوي قيم المتغيرات البيئية ذات نطاق المستخدم والجهاز على أكثر من 2048 حرفًا.
العملية
المتغيرات البيئية في نطاق العملية العملية هي مزيج من نطاق الجهاز الجهاز والمستخدم المستخدم ، جنبًا إلى جنب مع بعض المتغيرات التي ينشئها Windows بشكل ديناميكي.
أدناه قائمة بالمتغيرات البيئية المتاحة للعملية الجارية. يتم إنشاء جميع هذه المتغيرات بشكل ديناميكي.
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 بمعلمة الاستعلام لاسترداد قيمة المتغير TEMP.
سوف تلاحظ أحيانًا أن المتغيرات البيئية تعرض بين رموز النسبة المئوية (٪ COMPUTERNAME٪) مثل ما هو موضح أعلاه. هذه هي الطريقة القديمة لعرض المتغيرات البيئية عبر cmd.exe وملفات الدفع. تذكر أن PowerShell لا يتعرف على هذا التنسيق.
تسمح لنا أداة REG برؤية القيمة الأصلية لقيمة التسجيل. نوع القيمة هو REG_EXPAND_SZ وتحتوي القيمة على المتغير البيئي %USERPROFILE٪.
إذا كنت تفضل استخدام PowerShell لاسترداد قيمة التسجيل ، يمكنك ذلك باستخدام cmdlet Get-Item كما هو موضح أدناه.
عرض وتعيين متغيرات البيئة في Windows عبر واجهة المستخدم الرسومية
لعرض عرض الواجهة الرسومية لمتغيرات البيئة للمستخدم والنظام ، قم بتشغيل SystemPropertiesAdvanced.exe من PowerShell ، سطر الأوامر أو من Windows Key + R لعرض علامة التبويب System Properties Advanced. انقر فوق زر EnvironmentVariables ، والذي يتم تسليط الضوء عليه في الصورة أدناه.

مربع حوار المتغيرات البيئية ، الموضح أدناه ، يتيح لك عرض وإنشاء وتعديل متغيرات البيئة الموجهة للمستخدم والجهاز. لاحظ أن مربع الحوار يشير إلى المتغيرات الموجهة للجهاز بأنها متغيرات النظام.

الآن بعد أن لديك فهم للمتغيرات البيئية ، دعونا ننتقل إلى ما أنت هنا من أجله ، إدارتها باستخدام PowerShell!
هناك عدة طرق مختلفة يمكنك من خلالها التفاعل مع المتغيرات البيئية باستخدام PowerShell.
- محرك الـ
Env:
وبيئة الـ Provider – يعمل فقط على تحديد قيم المتغيرات البيئية لجلسة PowerShell الحالية - متغيرات
$env:
– تعمل فقط على تحديد قيم المتغيرات البيئية لجلسة PowerShell الحالية - فئة
[System.Environment]
في .NET – تسمح لك بالاحتفاظ بالمتغيرات البيئية ذات النطاق الخاص بالمستخدم والنظام عبر الجلسات وإعادة التشغيل
محرك الـ Env:
وبيئة الـ Provider
واحدة من أفضل الطرق لقراءة المتغيرات البيئية هي مفهوم PowerShell المعروف بـ “PowerShell drives (PS drives)”. يسمح لك محرك PS بمعاملة المتغيرات البيئية كما لو كانت نظام ملفات من خلال محرك الـ Env:
.
الانتقال إلى محرك الـ Env:
مثل كل المحركات في PowerShell، يمكنك الإشارة إليه عبر المسارات مثل Env:\TEMP
، Env:\COMPUTERNAME
، وما إلى ذلك. ولكن لتوفير بعض الكتابات، قم بالتبديل إلى محرك الـ Env:
تمامًا كما تفعل مع أي محرك نظام ملفات، كما هو موضح أدناه.
اكمال التحقق باستخدام محرك الـ Env:
يمكنك استخدام نفس الأوامر التي تستخدمها للوصول إلى نظام الملفات، مثل Get-Item
و Get-ChildItem
للوصول إلى متغيرات البيئة. ولكن بدلاً من نظام الملفات، فأنت تقرأ محرك الأقراص Env:
.
نظرًا لأن متغيرات البيئة مخزنة في محرك الأقراص في PowerShell، يمكنك استخدام ميزة إكمال التبويب لتصفح المتغيرات المتاحة كما هو موضح أدناه.

دعنا ننتقل الآن إلى بعض الأمثلة على كيفية استخدام محرك الأقراص Env:
في PowerShell للعمل مع متغيرات البيئة.
قائمة بمتغيرات البيئة باستخدام Env:
قائمة بمتغيرات البيئة باستخدام نمط مطابق مع Env:
العثور على قيمة متغير البيئة باستخدام Env:
نتائج هذه الأوامر هي كائنات .NET من نوع المفتاح/القيمة [System.Collections.DictionaryEntry]
. تحمل هذه الكائنات اسم المتغير في خاصية Name
والقيمة في خاصية Value
.
يمكنك الوصول إلى قيمة محددة من متغير البيئة عن طريق وضع الإشارة المرجعية لأمر Get-Item
بين الأقواس والإشارة إلى خاصية Value
كما هو موضح أدناه:
في الحالات التي تحتاج فيها إلى إرجاع متغيرات البيئة المحددة فقط ، استخدم أوامر PowerShell القياسية مثل Select-Object
و Where-Object
لتحديد وتصفية الكائنات المُرجَعة بواسطة موفِّر Env:
.
في المثال أدناه ، يتم إرجاع متغير البيئة COMPUTERNAME
فقط.
كطريقة بديلة ، استخدم أمر Get-Content
. يعيد هذا الأمر كائن [String]
يحتوي على قيمة متغير البيئة. يكون هذا الكائن أسهل في التعامل معه حيث يعيد فقط القيمة ، بدلاً من كائن بخصائص Name
و Value
.
مثال توضيحي: إدخال قيم البيئة في سلسلة نصية
باستخدام Get-Content
، يمكنك العثور على قيمة متغير البيئة وإدراج متغير البيئة COMPUTERNAME
، على سبيل المثال ، في سلسلة نصية.
إعداد متغير بيئة (وإنشاؤه) باستخدام Env:
أنشئ متغيرات بيئة جديدة باستخدام PowerShell باستخدام أمر New-Item
. قم بتوفير اسم المتغير البيئي في النموذج Env:\<EnvVarName>
لقيمة Name
وقيمة متغير البيئة لمعلمة Value
كما هو موضح أدناه.
استخدم cmdlet Set-Item
لتعيين متغير بيئة، أو إنشاء متغير جديد إذا لم يكن موجودا بالفعل. يمكنك أن ترى أدناه باستخدام cmdlet Set-Item
، يمكنك إنشاء أو تعديل متغير بيئة.
نسخ متغير بيئة بواسطة Env:
في بعض الحالات، قد تحتاج إلى تكرار قيمة متغير بيئة. يمكنك القيام بذلك باستخدام cmdlet Copy-Item
.
يمكنك أن ترى أدناه أن قيمة المتغير COMPUTERNAME
تم نسخها إلى MYCOMPUTER
وتم استبدال قيمتها الحالية.
حذف متغير بيئة باستخدام Env:
قد تحدث حالات فيها لم يعد هناك حاجة لمتغير بيئة. يمكنك حذف متغيرات البيئة باستخدام واحدة من ثلاث طرق:
- استخدم cmdlet
Set-Item
لتعيين متغير بيئة بقيمة فارغة
- استخدم cmdlet
Remove-Item
.
- استخدم cmdlet
Clear-Item
.
إعادة تسمية متغير بيئة باستخدام Env:
في الحالات التي يحتاج فيها إلى تغيير اسم متغير بيئة، لديك خيار إعادة التسمية بدلاً من حذفه وإعادة إنشائه باستخدام موفر Env:
.
استخدم cmdlet Rename-Item
لتغيير اسم متغير البيئة مع الحفاظ على قيمته. فيما يلي يمكنك أن ترى أن المتغير MYCOMPUTER
تمت إعادة تسميته إلى OLDCOMPUTER
مع الاحتفاظ بقيمته.
$Env:
المتغيرات
بعد أن تمكنت من استخدام محرك Env:
للتعامل مع المتغيرات البيئية كملفات، يوضح هذا القسم كيفية التعامل معها كمتغيرات. يمكنك أيضًا إدارة المتغيرات البيئية في جلسة العمل باستخدام محلل التعبيرات في PowerShell. يتيح لك هذا الإصدار استخدام نطاق $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 المفيدة
مثل العديد من تطبيقات ويندوز الأخرى، تحتوي PowerShell على بعض متغيرات البيئة الخاصة بها. متغيران مفيدين للمعرفة هما PSExecutionPolicyPreference
و PSModulePath
.
PSExecutionPolicyPreference
يخزن متغير البيئة PSExecutionPolicyPreference
سياسة تنفيذ PowerShell الحالية. يتم إنشاؤه إذا تم ضبط سياسة تنفيذ 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 docs
- تعرف على تنسيق السلاسل في PowerShell وتوسيع السلاسل
Source:
https://adamtheautomator.com/powershell-environment-variables/