ในบทความนี้ เราจะมาเรียนรู้ว่า PowerShell เวอร์ชันใดมีอยู่ และอะไรคือความแตกต่างระหว่าง Windows PowerShell
และ PowerShell Core
และวิธีการตรวจสอบเวอร์ชันของ PowerShell ที่ติดตั้งบนคอมพิวเตอร์ภายในหรือระยะไกล
ประวัติและเวอร์ชันของ Windows PowerShell และ PowerShell Core
PowerShell ได้รับการติดตั้งตามค่าเริ่มต้นใน Windows ทุกรุ่นตั้งแต่ Windows 7 SP1 และ Windows Server 2008 R2 SP1 ตารางต่อไปนี้แสดงรายการของเวอร์ชัน PowerShell ทั้งหมด:
เวอร์ชัน PS | หมายเหตุ |
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) |
เป็นที่น่าสังเกตว่าในช่วง 2 ปีที่ผ่านมา Microsoft ระงับการพัฒนา Windows PowerShell แบบคลาสสิก (เฉพาะการแก้ไขจุดบกพร่องและการอัปเดตความปลอดภัยเท่านั้นที่จะได้รับการเผยแพร่) และมุ่งเน้นไปที่โอเพ่นซอร์สข้ามแพลตฟอร์ม 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 คือ ข้ามแพลตฟอร์ม และสามารถทำงานใน Linux ได้เช่นกัน
- PowerShell Core ไม่สอดคล้องกับ Windows PowerShell อย่างสมบูรณ์ อย่างไรก็ตาม Microsoft กำลังทำงานเพื่อปรับปรุงความเข้ากันได้แบบย้อนหลังกับ PS 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
ตรวจสอบค่าคุณสมบัติเวอร์ชัน
ภาพหน้าจอต่อไปนี้สร้างขึ้นใน Windows 10 โดยติดตั้ง PowerShell 5.1 ตามค่าเริ่มต้น เช่นใน Windows Server 2016
หรือ
$PSVersionTable
คุณสามารถรับค่าเวอร์ชัน PowerShell เท่านั้น:
$PSVersionTable.PSVersion.major
(ในตัวอย่างนี้ เราได้ PSVersion 2.0 ใน Windows Server 2008 R2)
คำสั่ง $PSVersionTable ทำงานอย่างถูกต้องใน PowerShell Core ในระบบปฏิบัติการต่างๆ
คุณยังสามารถค้นหาเวอร์ชันของ PowerShell ที่ติดตั้งได้ผ่านทางรีจิสทรี ในการดำเนินการ ให้รับค่าของพารามิเตอร์ PowerShellVersion ในรีจิสตรีคีย์ 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 คุณสามารถรับค่าพารามิเตอร์รีจิสตรีในคีย์ reg อื่นได้:
(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 ตัวแปรสภาพแวดล้อมหรือรับข้อมูลจากรีจิสทรีโดยตรง วิธีอื่นอาจส่งคืนข้อมูลที่ไม่ถูกต้อง
คุณสามารถติดตั้งเวอร์ชัน PowerShell บนคอมพิวเตอร์ระยะไกลได้โดยใช้ PowerShell Remoting โดยใช้ Invoke-Command cmdlet:
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.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