ב-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 עצמו. מסוף PowerShell או עורך קוד עם טרמינל משולב הם hosts של PowerShell.
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
, תראו שהוא מחזיר מספר גרסה שנראה כאילו זה יכול להיות גרסת מנוע הפוורשל. המראה יכול להיות מטעה.
מתחת לרץ Get-Host
ב- Windows PowerShell 5.1 ואתה יכול לראות שהוא חוזר עם 5.1.17134.858. זה נראה כמו גרסה תקינה.
אולם, לפעמים כאשר אתה מריץ Get-Host
בטרמינל משולב, הגרסה אינה זהה. אף על פי שבדרך כלל, המארח יייצג את אותה הגרסה של המנוע, זה לא בהכרח תמיד עושה זאת.
בדיקת גרסת פוורשל דרך Get-Host על מחשבים מרוחקים
אף על פי ש־Get-Host
נראה כי הוא מחזיר את אותה הגרסה כאשר מורץ על מחשב מקומי, זה לעולם לא יקרה על מחשבים מרוחקים.
לדוגמה, בואו נריץ Get-Host
על שרת Windows Server 2016 מרוחק באמצעות Invoke-Command
ונראה מה קורה.
בפעם האחרונה שבדקתי, אי אפשר להריץ PowerShell v1 על Windows Server 2016.
לסמוך על Get-Host
הוא רעיון רע בכל היבט.
בדיקת גרסת פוורשל באמצעות הפקודה $host.Version
הפניה ל־$host.Version
היא דרך נוספת לבדוק גרסת פוורשל. משתנה ה־$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
.
תראו שהגרסה הזו דומה, אך אינה כוללת את התיקון כמו האפשרויות האחרות.
שימוש בכלים אחרים
השימוש ברישום אומר גם שאין צורך להשתמש בפווארשל כלל כדי למצוא את הגרסה. ניתן להריץ פקודות מהפקודה המיידית או מכלי אחר שיכול לקרוא את הרישום.
רישום במחשבים מרוחקים
הרישום סטטי והערכים לא ישתנו מקומית או מרחוק. תוכלו להיות בבטחון שמה שאתם רואים במקומית יהיה זהה למה שאתם רואים מרחוק.
הצגת אותה גרסה במקומית ובמרחוק היא טובה. אך יש לי דרך טובה יותר להראות לכם באמצעות המשתנה האוטומטי $PSVersionTable
.
בדיקת גרסת PowerShell באמצעות פקודת $PSVersionTable.PSVersion
השיטה האחרונה והסופית היא להתייחס למאפיין PSVersion
במשתנה האוטומטי $PSVersionTable
. שיטה זו תמיד תייצג את מנוע הפוורשל.
המשתנה האוטומטי $PSVersionTable
הוא טבלת גיבוי לקריאה שמחזירה מידע ספציפית על גרסת מנוע הפוורשל. משתנה זה לא יחזיר רק את הגרסה, אלא גם את PSEdition. מאפיין זה יכול להיות או Core או Desktop לספק מידע נוסף אודות המהדורה של פוורשל הפועלת.

$PSVersionTable במחשבים מרוחקים
שימוש במשתנה האוטומטי $PSVersionTable
הוא מדויק כמקומית כפי שהוא מרוחק. ניתן לראות למטה שעל ידי עטיפת $PSVersionTable.PSVersion
בבלוק קוד ובביצוע הקוד הזה על מחשב מרוחק, זה יחזיר את אותה גרסה.
סיכום
בפוסט בבלוג הזה, למדת כל הדרכים לבדוק את גרסת פוורשל יתר ומרחוק. אני מקווה שהשיטות הראשונות נתנו לך רעיון על אילו דרכים לא לבדוק את הגרסה!
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.
אם פספסתי דרך כלשהי, אני אשמח לדעת בתגובות. אני אשמח לעדכן את הפוסט ולתת לך קרדיט.