ฉันจะทราบได้อย่างไรว่า PowerShell รุ่นใดที่ติดตั้งบนคอมพิวเตอร์และแน่นอนถ้าติดตั้งไว้เลย
ฉันจะทราบได้อย่างไรว่า PowerShell รุ่นใดที่ติดตั้งบนคอมพิวเตอร์และแน่นอนถ้าติดตั้งไว้เลย
คำตอบ:
ใช้$PSVersionTable.PSVersion
เพื่อกำหนดรุ่นเครื่องยนต์ 1.0
ถ้าตัวแปรไม่อยู่มันมีความปลอดภัยที่จะถือว่าเป็นเครื่องยนต์รุ่น
โปรดทราบว่า$Host.Version
และ(Get-Host).Version
ไม่น่าเชื่อถือ - มันสะท้อนถึงรุ่นของโฮสต์เท่านั้นไม่ใช่เครื่องยนต์ PowerGUI, PowerShellPLUS ฯลฯ เป็นแอปพลิเคชั่นโฮสติ้งทั้งหมดและพวกเขาจะตั้งค่าเวอร์ชันของโฮสต์เพื่อแสดงเวอร์ชันผลิตภัณฑ์ของพวกเขา - ซึ่งถูกต้องทั้งหมด แต่ไม่ใช่สิ่งที่คุณกำลังมองหา
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
$PSVersionTable
มีความน่าเชื่อถือมากกว่าและให้ผลตอบแทน $ PSVersion $PSVersionTable.PSVersion
นอกจากนี้คุณยังสามารถใช้ แม้ว่าคุณจะเชื่อมต่อจากระยะไกลไปยังเครื่องที่ใช้รุ่นอื่น ( invoke-command -computername myRemotePC -Credential foo {$host}
) ดูเหมือนว่า$host
จะแสดงรุ่นต่ำสุดที่พวกเขาเห็นด้วยสำหรับการทำให้เป็นอนุกรม ในขณะที่$PSVersionTable
จะแสดงเวอร์ชั่นจริง หวังว่ามันจะช่วยใครซักคน ..
notepad $profile
และทิ้งfunction psver { $PSVersionTable; $PSVersionTable.PSVersion }
มันไป โหลดซ้ำอีกครั้ง. $profile
และฉันสามารถพิมพ์psver
เวลาใดก็ได้เพื่อรับข้อมูลรุ่นโดยละเอียดและรายละเอียดอื่น ๆ
ผมจะใช้อย่างใดอย่างหนึ่งได้รับโฮสต์หรือ$ PSVersionTable แอนดี้ชไนเดอร์ชี้ว่า$PSVersionTable
ไม่ทำงานในเวอร์ชัน 1 มันได้รับการแนะนำในรุ่น 2
get-host
Name : ConsoleHost
Version : 2.0
InstanceId : d730016e-2875-4b57-9cd6-d32c8b71e18a
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : en-GB
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
$PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.4200
BuildVersion 6.0.6002.18111
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
$host.version
ไม่น่าเชื่อถือ - ตัวอย่างเช่นใน powergui จะส่งคืนรุ่นโฮสต์ powergui ซึ่งไม่เหมือนกับรุ่นเครื่องยนต์ powershell (ซึ่งเป็นสิ่งที่ต้องการ)
คุณสามารถดูตัวแปรในตัว, $psversiontable
. หากไม่มีอยู่แสดงว่าคุณมี V1 หากมีอยู่มันจะให้ข้อมูลทั้งหมดที่คุณต้องการ
1 > $psversiontable
Name Value
---- -----
CLRVersion 2.0.50727.4927
BuildVersion 6.1.7600.16385
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
เมื่อต้องการตรวจสอบว่ามีการติดตั้ง PowerShell หรือไม่คุณสามารถตรวจสอบรีจิสทรีเพื่อดูว่ามีอยู่หรือไม่
HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install
และ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3
และถ้ามีอยู่ค่าดังกล่าวจะเป็น 1 (สำหรับการติดตั้ง) ตามรายละเอียดในบล็อกโพสต์ตรวจสอบว่าติดตั้ง PowerShell และรุ่นหรือไม่
เมื่อต้องการตรวจสอบรุ่นของ PowerShell ที่ติดตั้งคุณสามารถตรวจสอบรีจิสตรีคีย์ได้
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion
และ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion
ตรวจสอบรุ่นของ PowerShell ที่ติดตั้งจากสคริปต์ .ps1 คุณสามารถใช้ต่อไปนี้หนึ่งซับตามรายละเอียดใน PowerShell.com ในซึ่ง PowerShell เวอร์ชัน Am I วิ่ง
$isV2 = test-path variable:\psversiontable
ไซต์เดียวกันยังให้ฟังก์ชันส่งคืนเวอร์ชัน:
function Get-PSVersion {
if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}
คุณสามารถตรวจสอบเวอร์ชั่นโดยตรงด้วยหนึ่งบรรทัดเท่านั้นโดยเรียกใช้ PowerShell จากภายนอกเช่นจาก Command Prompt
powershell -Command "$PSVersionTable.PSVersion"
ตาม@ psaulคุณสามารถมีหนึ่งคำสั่งที่ไม่เชื่อเรื่องพระเจ้าจากที่มา (CMD, PowerShell หรือ Pwsh) ขอบคุณสำหรับสิ่งนั้น.
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
ฉันทดสอบแล้วและมันทำงานได้อย่างไม่มีที่ติทั้งบน CMD และ PowerShell
cmd
และpowershell
ไม่มีประโยชน์ ฉันคาดว่าจะมีพฤติกรรมเช่นเดียวกันเช่นกัน :)
pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
ใช้งานได้ดี
คุณสามารถตรวจสอบว่ารุ่น Windows PowerShell ติดตั้งโดยทำการตรวจสอบต่อไปนี้:
ในคอนโซล Windows PowerShell ให้พิมพ์คำสั่งต่อไปนี้ที่พร้อมท์คำสั่งแล้วกด ENTER:
Get-Host | Select-Object Version
คุณจะเห็นผลลัพธ์ที่มีลักษณะดังนี้:
Version
-------
3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
วิธีการส่งต่อที่แนะนำของ Microsoft สำหรับการตรวจสอบว่ามีการติดตั้ง PowerShell หรือไม่และการตรวจสอบรุ่นที่ติดตั้งคือการดูคีย์รีจิสตรีเฉพาะสองคีย์ ฉันทำซ้ำรายละเอียดที่นี่ในกรณีที่การเชื่อมโยงแบ่ง
ตามหน้าเชื่อมโยง:
ขึ้นอยู่กับคีย์รีจิสทรีอื่น ๆ หรือรุ่นของ PowerShell.exe หรือตำแหน่งของ PowerShell.exe ไม่รับประกันว่าจะทำงานได้ในระยะยาว
หากต้องการตรวจสอบว่าติดตั้ง PowerShell เวอร์ชันใดให้ตรวจสอบค่าต่อไปนี้ในรีจิสตรี:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
เมื่อต้องการตรวจสอบว่ามีการติดตั้ง PowerShell เวอร์ชัน 1.0 หรือ 2.0 หรือไม่ให้ตรวจสอบค่าต่อไปนี้ในรีจิสตรี:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
ฉันพบวิธีที่ง่ายที่สุดในการตรวจสอบว่าติดตั้งไว้ที่:
cmd
แล้วตกลง)powershell
จากนั้นกดส่งคืน จากนั้นคุณควรได้รับPS
พรอมต์PowerShell :C:\Users\MyUser>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS C:\Users\MyUser>
จากนั้นคุณสามารถตรวจสอบรุ่นได้จากพรอมต์ PowerShell โดยพิมพ์$PSVersionTable.PSVersion
:
PS C:\Users\MyUser> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
PS C:\Users\MyUser>
พิมพ์exit
ถ้าคุณต้องการกลับไปที่พรอมต์คำสั่ง ( exit
อีกครั้งหากคุณต้องการปิดพรอมต์คำสั่งด้วย)
$host.version
เป็นเพียงผิดธรรมดา / ไม่น่าเชื่อถือ สิ่งนี้ทำให้คุณมีเวอร์ชันของโฮสติ้งที่ปฏิบัติการได้ (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe เป็นต้น) และไม่ใช่รุ่นของเอ็นจิ้นเอง
$psversiontable.psversion
รุ่นเครื่องยนต์ที่มีอยู่ใน สำหรับ PowerShell 1.0 ตัวแปรนี้ไม่มีอยู่ดังนั้นจะเห็นได้ชัดว่าหากตัวแปรนี้ไม่พร้อมใช้งานมีความปลอดภัยอย่างสมบูรณ์ที่จะถือว่าเครื่องยนต์เป็น 1.0 แน่นอน
ใช้:
$psVersion = $PSVersionTable.PSVersion
If ($psVersion)
{
#PowerShell Version Mapping
$psVersionMappings = @()
$psVersionMappings += New-Object PSObject -Property @{Name='5.1.14393.0';FriendlyName='Windows PowerShell 5.1 Preview';ApplicableOS='Windows 10 Anniversary Update'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.1.14300.1000';FriendlyName='Windows PowerShell 5.1 Preview';ApplicableOS='Windows Server 2016 Technical Preview 5'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.494';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3172985 1607'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.122';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3140743 1603'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.117';FriendlyName='Windows PowerShell 5 RTM 1602';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.63';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3135173 1602'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.51';FriendlyName='Windows PowerShell 5 RTM 1512';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.10514.6';FriendlyName='Windows PowerShell 5 Production Preview 1508';ApplicableOS='Windows Server 2012 R2'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.10018.0';FriendlyName='Windows PowerShell 5 Preview 1502';ApplicableOS='Windows Server 2012 R2'}
$psVersionMappings += New-Object PSObject -Property @{Name='5.0.9883.0';FriendlyName='Windows PowerShell 5 Preview November 2014';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows 8.1'}
$psVersionMappings += New-Object PSObject -Property @{Name='4.0';FriendlyName='Windows PowerShell 4 RTM';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'}
$psVersionMappings += New-Object PSObject -Property @{Name='3.0';FriendlyName='Windows PowerShell 3 RTM';ApplicableOS='Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8, and Windows 7 SP1'}
$psVersionMappings += New-Object PSObject -Property @{Name='2.0';FriendlyName='Windows PowerShell 2 RTM';ApplicableOS='Windows Server 2008 R2 SP1 and Windows 7'}
foreach ($psVersionMapping in $psVersionMappings)
{
If ($psVersion -ge $psVersionMapping.Name) {
@{CurrentVersion=$psVersion;FriendlyName=$psVersionMapping.FriendlyName;ApplicableOS=$psVersionMapping.ApplicableOS}
Break
}
}
}
Else{
@{CurrentVersion='1.0';FriendlyName='Windows PowerShell 1 RTM';ApplicableOS='Windows Server 2008, Windows Server 2003, Windows Vista, Windows XP'}
}
คุณสามารถดาวน์โหลดสคริปต์รายละเอียดวิธีการตรวจสอบการติดตั้งรุ่น PowerShell
วิธีที่ง่ายที่สุดในการลืมหน้านี้และไม่กลับไปที่หน้านี้คือเรียนรู้Get-Variable
:
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
ไม่จำเป็นต้องจดจำทุกตัวแปร เพียงแค่Get-Variable
เป็นพอ (และ "ควรจะมีบางสิ่งบางอย่างเกี่ยวกับรุ่น")
$PSVersionTable
วิธีตรวจสอบว่าติดตั้ง PowerShell หรือไม่ให้ใช้:
HKLM\Software\Microsoft\PowerShell\1 Install ( = 1 )
วิธีตรวจสอบว่ามีการติดตั้ง RC2 หรือ RTM หรือไม่:
HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-00301) -- For RC2
HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-04309) -- For RTM
ที่มา: เว็บไซต์นี้
เนื่องจากคำตอบที่เป็นประโยชน์ที่สุดไม่ได้ระบุว่ามีส่วนใดที่มีอยู่ฉันคิดว่าฉันจะให้คำตอบผ่านโซลูชันที่รวดเร็วและสกปรก มันขึ้นอยู่กับ PowerShell ในตัวแปรสภาพแวดล้อมของเส้นทางซึ่งเป็นสิ่งที่คุณต้องการ (หมวกให้คำตอบสูงสุดเพราะฉันไม่รู้) วางสิ่งนี้ลงในไฟล์ข้อความแล้วตั้งชื่อ
ทดสอบ PowerShell Version.cmd
หรือคล้ายกัน
@echo off
echo Checking powershell version...
del "%temp%\PSVers.txt" 2>nul
powershell -command "[string]$PSVersionTable.PSVersion.Major +'.'+ [string]$PSVersionTable.PSVersion.Minor | Out-File ([string](cat env:\temp) + '\PSVers.txt')" 2>nul
if errorlevel 1 (
echo Powershell is not installed. Please install it from download.Microsoft.com; thanks.
) else (
echo You have installed Powershell version:
type "%temp%\PSVers.txt"
del "%temp%\PSVers.txt" 2>nul
)
timeout 15
ฉันต้องการตรวจสอบรุ่นของ PowerShell แล้วเรียกใช้รหัสที่เหมาะสม เซิร์ฟเวอร์บางตัวของเราใช้ v5 และอื่น ๆ v4 ซึ่งหมายความว่าฟังก์ชั่นบางอย่างเช่นการบีบอัดอาจมีหรือไม่มีก็ได้
นี่คือทางออกของฉัน:
if ($PSVersionTable.PSVersion.Major -eq 5) {
#Execute code available in PowerShell 5, like Compress
Write-Host "You are running PowerShell version 5"
}
else {
#Use a different process
Write-Host "This is version $PSVersionTable.PSVersion.Major"
}
cmdlet ด้านล่างจะส่งคืนเวอร์ชัน PowerShell
$PSVersionTable.PSVersion.Major
$PSVersionTable
เป็นตัวแปรอัตโนมัติ วัตถุ มันไม่ใช่ cmdlet
นี่คือผลการค้นหาอันดับต้น ๆ สำหรับ "ไฟล์แบทช์รับรุ่น PowerShell" ดังนั้นฉันต้องการให้ตัวอย่างพื้นฐานของวิธีการไหลตามเงื่อนไขในไฟล์แบทช์ขึ้นอยู่กับรุ่น PowerShell
ตัวอย่างทั่วไป
powershell "exit $PSVersionTable.PSVersion.Major"
if %errorlevel% GEQ 5 (
echo Do some fancy stuff that only powershell v5 or higher supports
) else (
echo Functionality not support by current powershell version.
)
ตัวอย่างโลกแห่งความจริง
powershell "exit $PSVersionTable.PSVersion.Major"
if %errorlevel% GEQ 5 (
rem Unzip archive automatically
powershell Expand-Archive Compressed.zip
) else (
rem Make the user unzip, because lazy
echo Please unzip Compressed.zip prior to continuing...
pause
)
นอกจากนี้คุณยังสามารถเรียกคำสั่ง "โฮสต์" จากบรรทัดคำสั่ง PowerShell มันควรจะให้คุณค่าของ$host
ตัวแปรแก่คุณ
host
Get-Host
ไม่ว่าจะเป็นวิธีการรับรุ่นที่เชื่อถือได้ก็ตาม
การขยายคำตอบด้วยตัวดำเนินการที่เลือก:
Get-Host | select {$_.Version}
Get-Host
)