පරිගණකයක ස්ථාපනය කර ඇති පවර්ෂෙල්හි කුමන අනුවාදයද, ඇත්ත වශයෙන්ම එය කිසිසේත් ස්ථාපනය කර ඇත්දැයි තීරණය කරන්නේ කෙසේද?
පරිගණකයක ස්ථාපනය කර ඇති පවර්ෂෙල්හි කුමන අනුවාදයද, ඇත්ත වශයෙන්ම එය කිසිසේත් ස්ථාපනය කර ඇත්දැයි තීරණය කරන්නේ කෙසේද?
Answers:
$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
සවිස්තරාත්මක අනුවාදය තොරතුරු සහ වෙනත් විස්තර ලබා ගැනීම සඳහා ඕනෑම අවස්ථාවක.
මම Get-Host හෝ $ 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 හි, එය පවර්ෂෙල් එන්ජින් අනුවාදයට සමාන නොවන පවර්ගුයි ධාරක අනුවාදය ලබා දෙයි (එය අපේක්ෂිත දෙයයි.)
ඔබට බිල්ට් විචල්යය දෙස බැලිය හැකිය $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
පවර්ෂෙල් ස්ථාපනය කර ඇත්දැයි තීරණය කිරීම සඳහා, ඔබට පැවැත්ම සඳහා ලේඛකාධිකාරය පරීක්ෂා කළ හැකිය
HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install
සහ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3
බ්ලොග් පෝස්ට් එකේ විස්තර කර ඇති පරිදි අගය 1 (ස්ථාපනය සඳහා) තිබේද යන්න පවර්ෂෙල් ස්ථාපනය කර ඇත්දැයි පරීක්ෂා කරන්න .
ස්ථාපනය කර ඇති පවර්ෂෙල් හි අනුවාදය තීරණය කිරීම සඳහා, ඔබට රෙජිස්ට්රි යතුරු පරීක්ෂා කළ හැකිය
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion
සහ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion
එය .ps1 තිර රචනය සිට ස්ථාපනය කර ඇති PowerShell අනුවාදය තීරණය කිරීම සඳහා, ඔබ තුළ PowerShell.com මත විස්තර වශයෙන්, පහත දැක්වෙන එක්-ලයිනර් භාවිතා කළ හැකි කුමන PowerShell සංස්කරණය මම මම ධාවනය .
$isV2 = test-path variable:\psversiontable
අනුවාදය නැවත ලබා දීම සඳහා එම වෙබ් අඩවියම ශ්රිතයක් ද ලබා දෙයි:
function Get-PSVersion {
if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}
කමාන්ඩ් ප්රොම්ප්ට් වැනි බාහිරව පවර්ෂෙල් ආයාචනය කිරීමෙන් පමණක් ඔබට එක් පේළියකින් සෘජුවම අනුවාදය පරීක්ෂා කළ හැකිය
powershell -Command "$PSVersionTable.PSVersion"
අනුව @psaul ඔබ හැකි ඇත්තෙන්ම එය (CMD, PowerShell හෝ Pwsh) පැමිණි තැන සිට අඥේයවාදියෙක් බව එක් ආඥා කර නැත. ඒකට ස්තූතියි.
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
මම පරීක්ෂා කර ඇති අතර එය සීඑම්ඩී සහ පවර්ෂෙල් යන දෙඅංශයේම දෝෂ රහිතව ක්රියාත්මක විය.
cmd
හා powershell
කැමැතියි. මමත් ඒ හා සමාන හැසිරීමක් බලාපොරොත්තු වන්නෙමි. :)
pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
නියමයි.
පහත දැක්වෙන චෙක්පත සම්පූර්ණ කිරීමෙන් වින්ඩෝස් පවර්ෂෙල් අනුවාදය ස්ථාපනය කර ඇති බව ඔබට සත්යාපනය කළ හැකිය:
වින්ඩෝස් පවර්ෂෙල් කොන්සෝලය තුළ, විධාන විමසුමේදී පහත විධානය ටයිප් කර ENTER ඔබන්න:
Get-Host | Select-Object Version
මේ ආකාරයට පෙනෙන ප්රතිදානය ඔබට පෙනෙනු ඇත:
Version
-------
3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
පවර්ෂෙල් ස්ථාපනය කර ඇත්දැයි පරීක්ෂා කිරීම සහ ස්ථාපිත අනුවාදය තීරණය කිරීම සඳහා මයික්රොසොෆ්ට් විසින් නිර්දේශිත ඉදිරි අනුකූලතා ක්රමය වන්නේ නිශ්චිත රෙජිස්ට්රි යතුරු දෙකක් බැලීමයි. සබැඳිය කැඩී ගියහොත් මම මෙහි විස්තර ප්රතිනිෂ්පාදනය කර ඇත්තෙමි.
සම්බන්ධිත පිටුවට අනුව:
වෙනත් ඕනෑම රෙජිස්ට්රි යතුරක් හෝ පවර්ෂෙල්.එක්ස් හි අනුවාදයක් හෝ පවර්ෂෙල්.එක්ස් හි පිහිටීම මත පදනම්ව දිගු කාලීනව වැඩ කිරීමට සහතික නොවේ.
නම්, පරීක්ෂා කිරීමට ඕනෑම අනුවාදයක PowerShell ස්ථාපිත වේ, ලේඛන පහත සඳහන් අගය සඳහා පරීක්ෂා:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
පරීක්ෂා කිරීමට අනුවාදය 1.0 හෝ 2.0 යන්න PowerShell ස්ථාපිත වේ, ලේඛන පහත සඳහන් අගය සඳහා පරීක්ෂා:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
ස්ථාපනය කර ඇත්දැයි පරීක්ෂා කිරීමට පහසුම ක්රමය මම සොයාගත්තේ:
cmd
, පසුව හරි)powershell
නැවත පහර දෙන්න. එවිට ඔබට පවර්ෂෙල් PS
විමසුම ලබා ගත යුතුය :C:\Users\MyUser>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS C:\Users\MyUser>
ටයිප් කිරීමෙන් ඔබට පවර්ෂෙල් විමසුමේ අනුවාදය පරීක්ෂා කළ හැකිය $PSVersionTable.PSVersion
:
PS C:\Users\MyUser> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
PS C:\Users\MyUser>
exit
ඔබට නැවත විධාන විමසුමට යාමට අවශ්ය නම් ටයිප් කරන්න ( exit
නැවතත් ඔබට විධාන විමසුම වසා දැමීමට අවශ්ය නම්).
ස්ක්රිප්ට් ධාවනය කිරීමට, http://ss64.com/ps/syntax-run.html බලන්න .
$host.version
සරල වැරදි / විශ්වාස කළ නොහැකි ය. මෙය ඔබට සත්කාරක ක්රියාත්මක කළ හැකි අනුවාදය (powerhell.exe, powergui.exe, powerhell_ise.exe, powerhellplus.exe යනාදිය) ලබා දෙන අතර එන්ජිමේම අනුවාදය නොවේ .
එන්ජින් අනුවාදය අඩංගු වේ $psversiontable.psversion
. පවර්ෂෙල් 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'}
}
ස්ථාපිත පවර්ෂෙල් අනුවාදය තීරණය කරන්නේ කෙසේද යන්නෙන් ඔබට සවිස්තරාත්මක පිටපත බාගත කළ හැකිය .
මෙම පිටුව අමතක කර එය වෙත නැවත නොයාමට ඇති පහසුම ක්රමය නම් Get-Variable
:
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
සෑම විචල්යයක්ම මතක තබා ගැනීමේ අවශ්යතාවයක් නොමැත. පමණක් Get-Variable
ප්රමාණවත් (සහ "අනුවාදය ගැන යමක් තිබිය යුතුය").
$PSVersionTable
පවර්ෂෙල් ස්ථාපනය කර ඇත්දැයි පරීක්ෂා කිරීමට භාවිතා කරන්න:
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
මුලාශ්රය: මෙම වෙබ් අඩවිය .
වඩාත්ම ප්රයෝජනවත් පිළිතුර පවතින්නේ නම් කොටස ආමන්ත්රණය නොකළ හෙයින් , ඉක්මන් හා අපිරිසිදු විසඳුමක් හරහා එය ලබා ගැනීමට මම සිතුවෙමි. එය රඳා පවතින්නේ ඔබට අවශ්ය දේ විය හැකි මාර්ග පරිසර විචල්යයේ පවර්ෂෙල් වීමයි . (මා නොදැන සිටි පරිදි ඉහළ පිළිතුරට තොප්පි ඉඟිය.) මෙය පෙළ ගොනුවකට අලවා එය නම් කරන්න
පවර්ෂෙල් අනුවාදය 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
මට අවශ්ය වූයේ පවර්ෂෙල් හි අනුවාදය පරීක්ෂා කර සුදුසු කේතය ධාවනය කිරීමයි. අපගේ සමහර සේවාදායකයන් 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 මඟින් පවර්ෂෙල් අනුවාදය නැවත ලබා දෙනු ඇත.
$PSVersionTable.PSVersion.Major
$PSVersionTable
ස්වයංක්රීය විචල්යයකි; වස්තුවක්. එය සෙ.මී.
"Batch file get powerhell version" සඳහා වන ඉහළම සෙවුම් ප්රති result ලය මෙයයි, එබැවින් පවර්ෂෙල් අනුවාදය මත පදනම්ව කණ්ඩායම් ගොනුවක කොන්දේසි සහිත ප්රවාහයක් කරන්නේ කෙසේද යන්න පිළිබඳ මූලික උදාහරණයක් සැපයීමට මම කැමතියි.
සාමාන්ය උදාහරණය
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
විචල්යයේ වටිනාකම ලබා දිය යුතුය .
host
වෙත විසඳයි Get-Host
. කෙසේ වෙතත්, එය අනුවාදය ලබා ගැනීම සඳහා විශ්වාසදායක ක්රමයක් නොවේ.
පවර්ෂෙල් අනුවාදය තීරණය කළ හැකි කුඩා කණ්ඩායම් පිටපතක් මම සාදා ඇත:
@echo off
for /f "tokens=2 delims=:" %%a in ('powershell -Command Get-Host ^| findstr /c:Version') do (echo %%a)
මෙය හුදෙක් පවර්ෂෙල් අනුවාදය උපුටා ගෙන නූල Get-Host
සොයයිVersion
අනුවාදය සමඟ රේඛාව සොයාගත් විට, එය for
අනුවාදය උපුටා ගැනීම සඳහා විධානය භාවිතා කරයි . මෙම අවස්ථාවේ දී අපි කියන්නේ පරිසීමකය මහා බඩවැලක් වන අතර පළමු මහා බඩවැලේ ඊළඟට සොයන්න, එහි ප්රති my ලය මගේ නඩුවයි 5.1.18362.752
.
තෝරාගත් ක්රියාකරුවෙකු සමඟ පිළිතුර දිගු කිරීම:
Get-Host | select {$_.Version}
Get-Host
).