ในบทความนี้เราจะเรียนรู้ว่ามีเวอร์ชัน PowerShell อะไรบ้าง ความแตกต่างระหว่าง Windows PowerShell และ PowerShell Core และวิธีตรวจสอบเวอร์ชัน PowerShell ที่ติดตั้งอยู่บนคอมพิวเตอร์ท้องถิ่นหรือระยะไกล
ประวัติและเวอร์ชันของ Windows PowerShell และ PowerShell Core
PowerShell ติดตั้งมาพร้อมใน Windows ทุกเวอร์ชันตั้งแต่ Windows 7 SP1 และ Windows Server 2008 R2 SP1 ตารางต่อไปนี้แสดงรายการเวอร์ชัน PowerShell ทั้งหมด:
| PS Version | Note |
| PowerShell 1.0 | ติดตั้งด้วยตนเองบน Windows Server 2003 SP1 และ Windows XP |
| PowerShell 2.0 | Windows Server 2008 R2 และ Windows 7 |
| PowerShell 3.0 | Windows 8 และ Windows Server 2012 |
| PowerShell 4.0 | Windows 8.1 และ Windows Server 2012 R2 |
| PowerShell 5.0 | ติดตั้งมาพร้อม Windows 10 RTM และอัปเดตเป็น 5.1 อัตโนมัติผ่าน Windows Update |
| PowerShell 5.1 | สร้างในตัว Windows 10 (เริ่ม Build 1709) และ Windows Server 2016 |
| PowerShell Core 6.0 และ 6.1 | เป็นเวอร์ชัน PowerShell ข้ามแพลตฟอร์มถัดไป (บน .NET Core) ที่ติดตั้งได้บน Windows ทุกเวอร์ชันที่รองรับ และบน MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE |
| PowerShell Core 7.0 | เป็นเวอร์ชัน PowerShell ล่าสุดที่ปล่อยใน มีนาคม 2020 (ใช้ .NET Core 3.1 แทน .NET Core 2.x) |
คุณสามารถติดตั้ง PowerShell เวอร์ชันใหม่กว่าใน Windows เวอร์ชันก่อนหน้าได้ด้วยตนเอง เพื่อทำเช่นนั้น ให้ดาวน์โหลดและติดตั้งเวอร์ชันที่เหมาะสมของ Windows Management Framework (PowerShell เป็นส่วนหนึ่งของมัน)
ควรทราบว่าใน 2 ปีที่ผ่านมา Microsoft หยุดพัฒนา Windows PowerShell แบบคลาสสิก (มีการปล่อยเฉพาะ Bug Fixes และ Security Updates) และมุ่งเน้นไปที่ PowerShell Core แบบโอเพนซอร์สข้ามแพลตฟอร์ม
ความแตกต่างระหว่าง Windows PowerShell และ PowerShell Core?
- Windows PowerShell สร้างบน .NET Framework (ตัวอย่างเช่น PowerShell 5 ต้องการ .NET Framework v4.5 ตรวจสอบให้แน่ใจว่าติดตั้งแล้ว) PowerShell Core สร้างบน .Net Core;
- Windows PowerShell ทำงานเฉพาะในระบบปฏิบัติการ Windows ในขณะที่ PowerShell Core เป็น Cross-platform และทำงานใน Linux ได้;
- PowerShell Core ไม่เข้ากันได้กับ Windows PowerShell อย่างสมบูรณ์ อย่างไรก็ตาม Microsoft กำลังปรับปรุงความเข้ากันได้แบบย้อนหลังกับ Cmdlets และสคริปต์ PS เก่า (แนะนำให้ทดสอบสคริปต์ PS1 เก่าของคุณก่อนย้ายไป PowerShell Core) PowerShell Core 7 ให้ความเข้ากันได้สูงสุดกับ Windows PowerShell;
- คุณไม่สามารถใช้ PowerShell ISE Editor เพื่อแก้ไขสคริปต์ PowerShell Core ได้ (แต่สามารถใช้ Visual Studio Code);
- เนื่องจาก Windows PowerShell ไม่ได้รับการพัฒนาต่อไป แนะนำให้เริ่มย้ายไป PowerShell Core
วิธีรับเวอร์ชัน PowerShell จากคอนโซล
วิธีที่ง่ายที่สุดในการค้นหาว่าเวอร์ชัน PowerShell ไหนติดตั้งอยู่บนคอมพิวเตอร์ของคุณ คือการใช้คำสั่ง:
host
ตรวจสอบค่าของคุณสมบัติ Version
ภาพหน้าจอต่อไปนี้ถ่ายทำใน Windows 10 ที่มี PowerShell 5.1 ติดตั้งมาพร้อม เช่นเดียวกับ Windows Server 2016

หรือ
$PSVersionTable
คุณสามารถรับค่าเวอร์ชัน PowerShell เท่านั้น:
$PSVersionTable.PSVersion.major
(ในตัวอย่างนี้เราได้ PSVersion 2.0 ใน Windows Server 2008 R2 ติดตั้งสะอาด)

คำสั่ง $PSVersionTable ทำงานถูกต้องใน PowerShell Core บนระบบปฏิบัติการที่ต่างกัน
คุณยังสามารถค้นหาเวอร์ชัน PowerShell ที่ติดตั้งผ่าน Registry ได้ ในการทำเช่นนั้น ให้รับค่าพารามิเตอร์ PowerShellVersion ใน Registry Key HKLM\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine โดยใช้ Cmdlet Get-ItemProperty:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

วิธีที่อธิบายข้างต้นทำงานบน Windows Server 2012/Windows 8 หรือใหม่กว่า
ใน Windows Server 2008 R2/Windows 7 คุณสามารถรับค่าพารามิเตอร์ Registry ใน Registry Key อื่น:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

เพื่อรับเวอร์ชัน PowerShell Core ที่ติดตั้ง ให้ใช้คำสั่งต่อไปนี้:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions* -Name 'SemanticVersion').SemanticVersion
ตรวจสอบเวอร์ชัน PowerShell บนคอมพิวเตอร์ระยะไกล
เพื่อตรวจสอบเวอร์ชัน PowerShell บนโฮสต์ระยะไกล ให้ใช้ค่าของตัวแปรสภาพแวดล้อม $PSVersionTable หรือรับข้อมูลจาก Registry โดยตรง วิธีอื่นอาจคืนค่าข้อมูลที่ไม่ถูกต้อง
คุณสามารถรับเวอร์ชัน PowerShell ที่ติดตั้งบนคอมพิวเตอร์ระยะไกลผ่าน PowerShell Remoting โดยใช้ Cmdlet Invoke-Command:
Invoke-Command -ComputerName mun-dc01 -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred

Major Minor Build Revision PSComputerName ----- ----- ----- -------- -------------- 5 1 14393 3383 mun-dc01
คุณสามารถรับเวอร์ชัน PowerShell ที่ติดตั้งบนคอมพิวเตอร์หลายเครื่องโดยใช้สคริปต์ต่อไปนี้ (รายการคอมพิวเตอร์ระยะไกลต้องระบุเป็นไฟล์ข้อความธรรมดา):
Invoke-Command -ComputerName (Get-Content C:\PS\host_list.txt) -
ScriptBlock{$PSVersionTable.PSVersion} | Select PSComputerName, @{N="PS Version";E={$_.Major}}
หรือคุณสามารถรับรายการคอมพิวเตอร์โดเมนผ่าน Get-ADComputer และตรวจสอบเวอร์ชัน PowerShell บนพวกเขาแบบระยะไกล:
$adcomputer=(Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -SearchBase ‘OU=servers,OU=Munich,dc=woshub,dc=com’ ).Name
Invoke-Command-ComputerName $adcomputer -Scriptblock{$PSVersionTable.psversion} -ErrorAction SilentlyContinue
หากสคริปต์ PowerShell ของคุณใช้ฟีเจอร์ของเวอร์ชัน PS เฉพาะ คุณสามารถบังคับให้สคริปต์สลับไปใช้ PowerShell เวอร์ชันอื่นได้ ตัวอย่างเช่น เพื่อรันคอนโซลในโหมด PowerShell v3 ให้รันคำสั่งนี้ (.Net Framework 3.5 ต้องติดตั้ง):
PowerShell.exe -version 3
อาจสำคัญที่จะต้องรู้เวอร์ชัน PowerShell ของคุณ หากคุณรันสคริปต์หรือคำสั่งที่ใช้ Cmdlets หรือฟีเจอร์ของเวอร์ชัน PS เฉพาะ หากคุณต้องการตรวจจับเวอร์ชัน PowerShell ที่ติดตั้งในสคริปต์และใช้ Cmdlets ตามนั้น คุณสามารถรันสคริปต์ PS ต่อไปนี้:
$ps_version = $PSVersionTable.PSVersion.major
if ( $ps_version -eq "2" )
{
write "You are using Powershell 2.0"
}
elseif ( $ps_version -eq "5" )
{
write " You are using Powershell 5"
}
ในบทความต่อไป เราจะดูวิธีอัปเดตเวอร์ชัน PowerShell ใน Windows