في PowerShell، هناك مليون طريقة للقيام بنفس الشيء (أو شيء مقارب لذلك). في هذا المقال، ستتعلم كل الطرق للتحقق من إصدار PowerShell الذي لديك على الأجهزة المحلية وعن بُعد. سنغطي الطرق السيئة والطريقة الموصى بها بوصفي.
هناك مواقع تُظهر طرقًا مختلفة للتحقق من إصدار Powershell. لكن لا يوجد موقع جمع كل هذه الطرق بشمول. قررت تغيير ذلك.
يجب أن تعمل جميع هذه الطرق في كل من Windows PowerShell و PowerShell Core. هذه الأساليب يجب أن تعمل أيضًا في إصدارات Windows PowerShell من 1.0 حتى PowerShell 7.
الطرق التي يمكنك من خلالها معرفة إصدار PowerShell الذي تستخدمه هي:
- خاصية
(Get-Host).Version
- خاصية
$host.Version
- التسجيل (فقط في Windows PowerShell)
- خاصية
$PSVersionTable.PSVersion
دعنا نقسم جميع الطرق للعثور على إصدار PowerShell من الطريقة الأقل توصية إلى الأكثر توصية.
Get-Host
يتضمن PowerShell مفهومًا يُعرف باسم hosts. Host هو برنامج يستضيف محرك PowerShell. ليس هو المحرك نفسه. وحدة تحكم PowerShell أو محرر الكود مع وحدة نمطية مدمجة هي hosts.
A host can have a version that is completely independent of PowerShell itself. This can be deceiving to many newcomers. Let me show you why.
إذا قمت بتشغيل (Get-Host).Version
، سترى أنه يعيد رقم إصدار يبدو وكأنه يمكن أن يكون إصدار محرك PowerShell. الشكل الخارجي قد يكون مضللاً.
أدناه قمت بتشغيل Get-Host
على Windows PowerShell 5.1 ويمكنك رؤية أنه يعود بالإصدار 5.1.17134.858. هذا يبدو كإصدار شرعي.
ومع ذلك، في بعض الأحيان عندما تقوم بتشغيل Get-Host
في وحدة التحكم المدمجة، فإن الإصدار ليس نفسه. على الرغم من أن المضيف عادة ما يمثل نفس إصدار المحرك، إلا أنه لا يفعل ذلك بالضرورة دائمًا.
التحقق من إصدار Powershell عبر Get-Host على أجهزة الكمبيوتر عن بُعد
على الرغم من أن Get-Host
يبدو أنه يعيد نفس الإصدار عند التشغيل على جهاز كمبيوتر محلي، إلا أنه لن يفعل ذلك أبدًا على أجهزة الكمبيوتر عن بُعد.
على سبيل المثال، دعونا نقوم بتشغيل Get-Host
على خادم Windows Server 2016 عن بُعد عبر Invoke-Command
ونرى ماذا يحدث.
آخر مرة تحققت فيها، لم يكن من الممكن تشغيل PowerShell v1 على Windows Server 2016.
الاعتماد على Get-Host
فكرة سيئة بشكل عام.
التحقق من إصدار Powershell بأمر $host.Version
الإشارة إلى $host.Version
هي طريقة أخرى للتحقق من إصدار Powershell. المتغير $host
هو متغير تلقائي يعيد نفس الناتج الخارجي كـ Get-Host
.

$host.Version
لا يوجد شيء خاص بهذه الطريقة. إنها ببساطة نفس عمل تشغيل Get-Host
.
$host.Version على الكمبيوترات عن بُعد
سترى نفس السلوك عبر PowerShell Remoting باستخدام $host.Version
كما ستراه عند تشغيل Get-Host
.
خطر، ويل روبنسون!
سجل
إذا كنت لا ترغب في فتح PowerShell نفسه، يمكنك أيضًا التحقق من التسجيل. إصدار PowerShell مخفي تحت قيمة في مسار مفتاح التسجيل HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. يحتوي هذا المفتاح في التسجيل على قيمة تسمى PowerShellVersion
يمكنك الرجوع إليها باستخدام Get-ItemProperty
.
يمكنك رؤية أن هذا الإصدار مماثل ولكنه لا يتضمن التنقيح كما هو الحال في الخيارات الأخرى.
استخدام أدوات أخرى
يعني استخدام التسجيل أيضًا أنه لا يلزم استخدام PowerShell على الإطلاق للعثور على الإصدار. يمكنك تشغيل الأوامر من سطر الأوامر أو أداة أخرى يمكنها قراءة التسجيل.
سجل على الكمبيوترات عن بُعد
التسجيل ثابت والقيم لن تتغير محليًا أو عن بُعد. يمكنك أن تكون واثقًا من أن ما تراه محليًا سيكون نفسه مع عرضه عن بُعد.
عرض نفس الإصدار محليًا وعن بُعد جيد. ولكن لدي طريقة أفضل لعرضها باستخدام المتغير التلقائي $PSVersionTable
.
تحقق من إصدار Powershell عبر الأمر $PSVersionTable.PSVersion
الطريقة الأخيرة والنهائية هي الإشارة إلى خاصية PSVersion
على المتغير التلقائي $PSVersionTable
. ستمثل هذه الطريقة دائمًا محرك PowerShell.
المتغير التلقائي $PSVersionTable
هو جدول تجزئة للقراءة فقط يعيد معلومات بشكل خاص حول إصدار محرك PowerShell. هذا المتغير التلقائي لا يعيد فقط الإصدار ولكن أيضًا PSEdition. يمكن أن يكون هذا الخاصية إما Core أو Desktop لتوفير معلومات إضافية حول نسخة PowerShell التي تعمل.

$PSVersionTable على الحواسيب البعيدة
استخدام المتغير التلقائي $PSVersionTable
دقيق محليًا كما هو عن بعد. يمكنك أن ترى أدناه أنه عن طريق لف $PSVersionTable.PSVersion
في كتلة النص وتنفيذ ذلك الكود على جهاز كمبيوتر بعيد، سيعيد نفس الإصدار.
ملخص
في هذه المقالة في المدونة، لقد تعلمت جميع الطرق للتحقق من إصدار PowerShell محليًا وعن بعد. آمل أن تعطيك الطرق الأولى فكرة عن الطرق التي لا يجب التحقق من الإصدار بها!
I recommend always using $PSVersionTable.PSVersion
. All of the other methods may appear similar to the PowerShell engine version but may not always reflect the engine version.
إذا فاتني أي طريقة، يرجى إعلامي في التعليقات. سأكون سعيدًا بتحديث المقالة وإعطائك الفضل.