উত্তর:
$PSVersionTable.PSVersion
ইঞ্জিন সংস্করণ নির্ধারণ করতে ব্যবহার করুন । যদি ভেরিয়েবলটি বিদ্যমান না থাকে তবে ইঞ্জিনটি সংস্করণ হিসাবে ধরে নেওয়া নিরাপদ 1.0
।
নোট করুন $Host.Version
এবং (Get-Host).Version
নির্ভরযোগ্য নয় - তারা কেবল ইঞ্জিন নয়, হোস্টের সংস্করণ প্রতিফলিত করে। পাওয়ারজিইউআই, পাওয়ারশেলপিএলএস ইত্যাদি সমস্ত হোস্টিং অ্যাপ্লিকেশন এবং তারা তাদের পণ্যের সংস্করণটি প্রতিফলিত করার জন্য হোস্টের সংস্করণ সেট করবে - যা সম্পূর্ণ সঠিক, তবে আপনি যা খুঁজছেন তা নয়।
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
বিশদ সংস্করণ তথ্য এবং অন্যান্য বিবরণ পেতে কেবল যে কোনও সময় টাইপ করতে পারি ।
আমি হয় গেট-হোস্ট বা V 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
নির্ভরযোগ্য নয় - উদাহরণস্বরূপ পাওয়ারগুইতে, এটি পাওয়ারগুই হোস্ট সংস্করণ প্রদান করে যা পাওয়ারশেল ইঞ্জিন সংস্করণের মতো নয় (যা পছন্দসই))
আপনি বিল্ট ইন ভেরিয়েবলটি দেখতে পারেন $psversiontable
,। যদি এটি বিদ্যমান না থাকে, আপনার ভি 1 আছে। যদি এটি বিদ্যমান থাকে তবে এটি আপনাকে আপনার প্রয়োজনীয় সমস্ত তথ্য দেবে।
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 স্ক্রিপ্ট থেকে ইনস্টল করা পাওয়ারশেলের যে সংস্করণটি নির্ধারণ করা যায়, আপনি নিচের এক-লাইনারটি ব্যবহার করতে পারেন, পাওয়ারশেল ডটকমের বিবরণে কোন পাওয়ারশেল সংস্করণ আমি চালাচ্ছি ।
$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 আপনি করতে পারেন আসলে মাত্র একটি কমান্ড যে যেখানে এটি এসেছিলেন (সিএমডি, PowerShell বা Pwsh) থেকে অজ্ঞেয়বাদী আছে। এটার জন্য ধন্যবাদ.
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
আমি পরীক্ষা করেছি এবং এটি সিএমডি এবং পাওয়ারশেল উভয় ক্ষেত্রে নির্বিঘ্নে কাজ করেছে।
cmd
এবং এর মধ্যে powershell
কোনও ফল হয়নি n আমিও একই আচরণ আশা করতাম। :)
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/
মাইক্রোসফ্টের পাওয়ারশেল ইনস্টল করা আছে কিনা তা যাচাই করার জন্য মাইক্রোসফ্টের প্রস্তাবিত ফরোয়ার্ড সামঞ্জস্যপূর্ণ পদ্ধতি এবং ইনস্টলড সংস্করণ নির্ধারণের জন্য দুটি নির্দিষ্ট রেজিস্ট্রি কী দেখার প্রয়োজন। লিঙ্কটি ভেঙে যাওয়ার জন্য আমি এখানে বিশদটি পুনরুত্পাদন করেছি।
সংযুক্ত পৃষ্ঠা অনুসারে:
অন্য কোনও রেজিস্ট্রি কী (গুলি), বা পাওয়ারশেল.এক্সির সংস্করণ বা পাওয়ারশেল.এক্সির অবস্থানের উপর নির্ভর করে দীর্ঘমেয়াদে কাজ করার গ্যারান্টি নেই।
পাওয়ারশেলের কোনও সংস্করণ ইনস্টল করা আছে কিনা তা পরীক্ষা করতে নিবন্ধে নিচের মানটি পরীক্ষা করুন:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
পাওয়ারশেলের 1.0 বা 2.0 সংস্করণ ইনস্টল করা আছে কিনা তা যাচাই করতে , রেজিস্ট্রিতে নিম্নলিখিত মানটি পরীক্ষা করুন:
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
কেবল সাধারণ ভুল / বিশ্বাসযোগ্য নয়। এই আপনি হোস্টিং এক্সিকিউটেবল (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.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 )
আরসি 2 বা আরটিএম ইনস্টল রয়েছে কিনা তা পরীক্ষা করতে ব্যবহার করুন:
HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-00301) -- For RC2
HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-04309) -- For RTM
উত্স: এই ওয়েবসাইট ।
যেহেতু সর্বাধিক সহায়ক উত্তরটি যদি উপস্থিত অংশটিকে সম্বোধন করে না, তাই আমি ভেবেছিলাম যে আমি একটি দ্রুত এবং মলিন সমাধানের মাধ্যমে এটি গ্রহণ করব। এটি পাওয়ারশেলের পথে পরিবেশের পরিবর্তনশীলটিতে নির্ভর করে যা সম্ভবত আপনি চান। (আমি জানতাম না বলে শীর্ষের উত্তরের টুপি টিপুন)) এটি কোনও পাঠ্য ফাইলে আটকে দিন এবং নাম দিন
পরীক্ষার পাওয়ারশেল 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
আমার পাওয়ারশেলের সংস্করণ পরীক্ষা করা এবং তারপরে উপযুক্ত কোডটি চালানো দরকার। আমাদের কিছু সার্ভার 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"
}
নীচের সেন্টিমলেটটি পাওয়ারশেল সংস্করণটি ফিরিয়ে দেবে।
$PSVersionTable.PSVersion.Major
$PSVersionTable
একটি স্বয়ংক্রিয় পরিবর্তনশীল; একটি বস্তু এটি কোনও সেন্টিমলেট নয়।
এটি "ব্যাচের ফাইল পাওয়ারশেল সংস্করণ পান" এর শীর্ষ অনুসন্ধান ফলাফল, সুতরাং আমি পাওয়ার শেল সংস্করণের উপর নির্ভর করে একটি ব্যাচ ফাইলে শর্তাধীন প্রবাহ কীভাবে করব তার একটি মৌলিক উদাহরণ দিতে চাই I'd
জেনেরিক উদাহরণ
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
)
আপনি পাওয়ারশেল কমান্ডলাইন থেকে "হোস্ট" কমান্ড কল করতে পারেন। এটি আপনাকে $host
ভেরিয়েবলের মান দিতে হবে ।
host
সমাধান করে Get-Host
। নির্বিশেষে, সংস্করণটি পাওয়ার কোনও নির্ভরযোগ্য উপায় নয়।
একটি নির্বাচিত অপারেটরের সাথে উত্তর প্রসারিত করা:
Get-Host | select {$_.Version}
Get-Host
)।