Trong bài viết này, chúng ta sẽ học các phiên bản PowerShell hiện có, khác biệt giữa Windows PowerShell và PowerShell Core, và cách kiểm tra phiên bản PowerShell cài đặt trên máy tính cục bộ hoặc từ xa.
Lịch sử và các phiên bản Windows PowerShell và PowerShell Core
PowerShell được cài đặt mặc định trong tất cả phiên bản Windows bắt đầu từ Windows 7 SP1 và Windows Server 2008 R2 SP1. Bảng sau hiển thị danh sách tất cả phiên bản PowerShell:
| PS Version | Ghi chú |
| PowerShell 1.0 | Có thể cài thủ công trên Windows Server 2003 SP1 và Windows XP |
| PowerShell 2.0 | Windows Server 2008 R2 và Windows 7 |
| PowerShell 3.0 | Windows 8 và Windows Server 2012 |
| PowerShell 4.0 | Windows 8.1 và Windows Server 2012 R2 |
| PowerShell 5.0 | Cài sẵn trên Windows 10 RTM và tự động cập nhật lên 5.1 qua Windows Update |
| PowerShell 5.1 | Tích hợp sẵn trong Windows 10 (bắt đầu Build 1709) và Windows Server 2016 |
| PowerShell Core 6.0 và 6.1 | Phiên bản PowerShell cross-platform tiếp theo (dựa trên .NET Core) có thể cài trên tất cả Windows được hỗ trợ và MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE |
| PowerShell Core 7.0 | Phiên bản PowerShell mới nhất phát hành tháng 3/2020 (dùng .NET Core 3.1 thay vì .NET Core 2.x) |
Bạn có thể cài thủ công phiên bản PowerShell mới hơn trong các phiên bản Windows trước. Để làm vậy, tải xuống và cài đặt phiên bản phù hợp của Windows Management Framework (PowerShell là một phần của nó).
Đáng chú ý rằng trong 2 năm qua Microsoft đã ngừng phát triển Windows PowerShell cổ điển (chỉ phát hành sửa lỗi và cập nhật bảo mật) và tập trung vào PowerShell Core mã nguồn mở cross-platform.
Khác biệt giữa Windows PowerShell và PowerShell Core?
- Windows PowerShell dựa trên .NET Framework (ví dụ, PowerShell 5 yêu cầu .NET Framework v4.5, hãy đảm bảo nó được cài). PowerShell Core dựa trên .Net Core;
- Windows PowerShell chỉ hoạt động trong hệ điều hành Windows, trong khi PowerShell Core là cross-platform và có thể chạy trên Linux;
- PowerShell Core không hoàn toàn tương thích với Windows PowerShell, tuy nhiên Microsoft đang cải thiện tương thích ngược với cmdlet và script PS cũ. (khuyên test script PS1 cũ trước khi chuyển sang PowerShell Core). PowerShell Core 7 cung cấp tương thích cao nhất với Windows PowerShell;
- Bạn không thể dùng PowerShell ISE Editor để chỉnh sửa script PowerShell Core (nhưng Visual Studio Code có thể dùng);
- Vì Windows PowerShell không còn phát triển, khuyên bạn nên bắt đầu chuyển sang PowerShell Core.
Cách lấy phiên bản PowerShell từ Console?
Cách dễ nhất để biết phiên bản PowerShell cài trên máy tính là dùng lệnh:
host
Kiểm tra giá trị thuộc tính Version.
Ảnh chụp màn hình sau được làm trên Windows 10 có PowerShell 5.1 cài sẵn mặc định, như trong Windows Server 2016.

hoặc
$PSVersionTable
Bạn có thể chỉ lấy giá trị phiên bản PowerShell:
$PSVersionTable.PSVersion.major
(trong ví dụ này chúng ta nhận PSVersion 2.0 trên Windows Server 2008 R2 sạch)

Lệnh $PSVersionTable hoạt động chính xác trong PowerShell Core trên các hệ điều hành khác nhau.
Bạn cũng có thể tìm phiên bản PowerShell cài qua registry. Lấy giá trị tham số PowerShellVersion trong khóa registry HKLM\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine dùng cmdlet Get-ItemProperty:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

Phương pháp trên hoạt động trên Windows Server 2012/Windows 8 hoặc mới hơn.
Trong Windows Server 2008 R2/Windows 7, bạn có thể lấy giá trị tham số registry trong khóa reg khác:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

Để lấy phiên bản PowerShell Core cài đặt, dùng lệnh sau:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions* -Name 'SemanticVersion').SemanticVersion
Kiểm tra phiên bản PowerShell trên máy tính từ xa
Để kiểm tra phiên bản PowerShell trên host từ xa, dùng giá trị biến môi trường $PSVersionTable hoặc lấy thông tin từ registry trực tiếp. Các phương pháp khác có thể trả về dữ liệu không chính xác.
Bạn có thể lấy phiên bản PowerShell cài trên máy tính từ xa qua PowerShell Remoting dùng cmdlet Invoke-Command:
Invoke-Command -ComputerName mun-dc01 -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred

Major Minor Build Revision PSComputerName ----- ----- ----- -------- -------------- 5 1 14393 3383 mun-dc01
Bạn có thể lấy phiên bản PowerShell cài trên nhiều máy tính dùng script sau (danh sách máy tính từ xa phải chỉ định như file văn bản thuần túy):
Invoke-Command -ComputerName (Get-Content C:\PS\host_list.txt) -
ScriptBlock{$PSVersionTable.PSVersion} | Select PSComputerName, @{N="PS Version";E={$_.Major}}
Hoặc bạn có thể lấy danh sách máy tính miền qua Get-ADComputer và kiểm tra từ xa phiên bản PowerShell trên chúng:
$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
Nếu script PowerShell của bạn dùng tính năng của phiên bản PS cụ thể, bạn có thể ép script chuyển sang phiên bản PowerShell khác. Ví dụ, để chạy console ở chế độ PowerShell v3, chạy lệnh này (.Net Framework 3.5 phải được cài):
PowerShell.exe -version 3
Có thể quan trọng phải biết phiên bản PowerShell nếu bạn chạy script hoặc lệnh dùng cmdlet hoặc tính năng của phiên bản PS cụ thể. Nếu bạn muốn phát hiện phiên bản PowerShell cài trong script và dùng cmdlet dựa trên nó, bạn có thể chạy script PS sau:
$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"
}
Trong bài viết tiếp theo, chúng ta sẽ xem cách cập nhật phiên bản PowerShell trong Windows.