निर्धारित PowerShell संस्करण


2631

मैं यह कैसे निर्धारित कर सकता हूं कि कंप्यूटर पर PowerShell का कौन सा संस्करण स्थापित है, और वास्तव में अगर यह बिल्कुल भी स्थापित है?

जवाबों:


3583

$PSVersionTable.PSVersionइंजन संस्करण निर्धारित करने के लिए उपयोग करें । यदि चर मौजूद नहीं है, तो इंजन संस्करण है मान लेना सुरक्षित है 1.0

ध्यान दें कि $Host.Versionऔर (Get-Host).Versionविश्वसनीय नहीं हैं - वे केवल होस्ट के संस्करण को दर्शाते हैं, इंजन को नहीं। PowerGUI, PowerShellPLUS, आदि सभी होस्टिंग अनुप्रयोग हैं, और वे अपने उत्पाद संस्करण को प्रतिबिंबित करने के लिए होस्ट के संस्करण को सेट करेंगे - जो पूरी तरह से सही है, लेकिन वह नहीं जो आप देख रहे हैं।

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

2
@DanielCassidy - पार्टी में दो साल देर हो गई, लेकिन "कुछ विशेषताएँ बेहिसाब रूप से अनुपलब्ध हैं" केवल पूर्ण नेट के बजाय .Net 3.5 कॉम्पैक्ट फ्रेमवर्क स्थापित करने के कारण हो सकती हैं।
डेव नीली

83
$PSVersionTableअधिक विश्वसनीय है और $ PSVersion लौटाता है। आप भी इस्तेमाल कर सकते हैं $PSVersionTable.PSVersion। यहां तक ​​कि अगर आप अलग-अलग संस्करण चलाने वाली मशीन से दूर से जुड़े हुए हैं ( invoke-command -computername myRemotePC -Credential foo {$host}), तो ऐसा लगता है कि $hostवे सबसे कम संस्करण दिखाएंगे जो उन्होंने क्रमांकन के लिए सहमति व्यक्त की थी। जबकि $PSVersionTableसच्चा संस्करण दिखाएगा। आशा है कि यह किसी की मदद करेगा ..
vulcan raven

16
लगता है $ host.Version एक अच्छा विकल्प नहीं है ... यदि आप PowerShell 3 को चलाने वाली मशीन के लिए रिमोट करते हैं, तो आपको 1.0 मिलता है, क्योंकि RemotingHost v1 लगता है। $ PSVersionTable का उपयोग करके सही ढंग से रिटर्न 3.
डैनी टुपनेनी

25
@Starfish कमांड दिखाया गया कमांड कमांड प्रॉम्प्ट का उपयोग करके पॉवर्स को लॉन्च करता है। यदि यह स्थापित नहीं है, तो क्या कमांड "पॉवरशेल नहीं मिला" के साथ केवल त्रुटि नहीं करेगा?
jpmc26

9
यहाँ आने के लिए इतना थक गया कि मैं बस भागा notepad $profileऔर function psver { $PSVersionTable; $PSVersionTable.PSVersion }उसमें डूबा । विस्तृत संस्करण की जानकारी और अन्य विवरण प्राप्त करने के लिए . $profileमैं psverकिसी भी समय लोड कर सकता हूं ।
ADTC

432

मैं गेट-होस्ट या $ 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

5
धन्यवाद! NB: मेरे XP पर जहां मैंने मैन्युअल रूप से v1 पॉवर्सशेल से अपग्रेड किया है, वास्तविक फ़ोल्डर और रजिस्ट्री पथ (भ्रामक रूप से ?!) संदर्भ v1 नहीं v2। यह वही है जो अन्य लोग यहाँ निर्दिष्ट करते हैं, लेकिन यही कारण था कि मैं इतना चिंतित था कि क्या मैंने इसे स्थापित किया था। मेरा रास्ता है; C: \ WINDOWS \ system32 \ windowspowershell \ v1.0
अनेइगइल

4
यदि $ psversiontable मौजूद नहीं है, तो यह मान लेना पूरी तरह से सुरक्षित है कि आप v1.0 पर हैं - और हे प्रेस्टो, जो आपके प्रश्न का उत्तर भी देता है। $host.versionविश्वसनीय नहीं है - उदाहरण के लिए पॉवरगुई में, यह पॉवरगुई होस्ट संस्करण लौटाता है जो कि पॉवरशेल इंजन संस्करण (जो वांछित है) के समान नहीं है
x0n

10
स्वीकृत उत्तर बताता है "... $ Host.Version और (Get-Host) ।Version विश्वसनीय नहीं हैं - वे केवल होस्ट के संस्करण को दर्शाते हैं, इंजन को नहीं"
पीटर मोर्टेंसन

99

तुम्हें पता है, चर में बनाया देख सकते हैं $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    

96

यह निर्धारित करने के लिए कि पावरशेल स्थापित है या नहीं, आप अस्तित्व के लिए रजिस्ट्री की जांच कर सकते हैं

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

एक .ps1 स्क्रिप्ट से स्थापित PowerShell के संस्करण का निर्धारण करने के लिए, आप निम्न एक-लाइनर का उपयोग कर सकते हैं, जैसा कि PowerShell.com पर विस्तृत है जिसमें PowerShell संस्करण Am I Run चल रहा है

$isV2 = test-path variable:\psversiontable

वही साइट संस्करण को वापस करने के लिए एक फ़ंक्शन भी देती है:

function Get-PSVersion {
    if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}

4
उपयोगी होने के कारण Windows 2003 सर्वर पर मुझे PowerShell के लिए प्रारंभ मेनू प्रविष्टि नहीं मिली (यह वहां था लेकिन स्पष्ट नहीं), लेकिन रजिस्ट्री कुंजी ने मेरे प्रश्न का उत्तर दिया।
समग्र डेवलपर

7
PowerScript 3.0 के लिए एक नई प्रविष्टि लगती है, HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3 ( HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 के अलावा )। संस्करण प्राप्त करने के लिए इस मामले में उचित स्थान HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3 \ PowerShellEngine \ PowerShellVersion (नमूना मान "3.0") है।
पीटर मोर्टेंसन

47

आप केवल PowerShell को बाह्य रूप से कमांड करके केवल एक पंक्ति के साथ संस्करण की जांच कर सकते हैं , जैसे कि कमांड प्रॉम्प्ट से

powershell -Command "$PSVersionTable.PSVersion"

के अनुसार @psaul आप कर सकते हैं वास्तव में एक आदेश है कि जहां यह आया था (सीएमडी, PowerShell या Pwsh) से नास्तिक है। उसके लिये आपका धन्यवाद।

powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"

मैंने परीक्षण किया है और इसने CMD और PowerShell दोनों पर दोषपूर्ण तरीके से काम किया है।

छवि


मुझे उस प्रयास के साथ यह भयानक त्रुटि मिलती है: "System.Collections.Hashtable.PSVersion: शब्द 'System.Collections.Hashtable.PSVersion' को एक cmdlet, फ़ंक्शन, स्क्रिप्ट फ़ाइल या ऑपरेशनल प्रोग्राम के नाम के रूप में मान्यता नहीं दी गई है। नाम की वर्तनी, या यदि कोई पथ शामिल किया गया था, तो सत्यापित करें कि पथ सही है और पुन: प्रयास करें। " तो हमेशा काम नहीं करता है
गोनमेटर

मुझे खुशी है कि आपने बताया कि चूंकि कोने के मामलों को जानना अच्छा है, लेकिन मुझे लगता है कि यह अभी भी अधिकांश लोगों के लिए काम करता है।
पैट्रिक बार्ड

@Gonmator को लगता है कि PowerShell इस कमांड के साथ उसी तरह का व्यवहार करेगा, लेकिन दुर्भाग्य से ऐसा नहीं है। मैंने बीच cmd- बीच में और powershellबिना किसी लाभ के काम करने के लिए वाक्य रचना को ठीक करने का प्रयास किया । मुझसे भी यही व्यवहार अपेक्षित होता। :)
tresf

3
@tresf (और @Gonmator) आप इस agnostically को CMD, PowerShell, या यहां तक ​​कि Pwsh (PS 6.0) से चला सकते हैं, लेकिन आपको इस फॉर्म का उपयोग करने की आवश्यकता है: powerhell -command "(Get-VariableVVersionTable -ValueOnly) .PSVersion" (वह होगा)। सभी मामलों में काम)
PSaul

मैक पर भी परीक्षण किया गया। pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion" बहुत अच्छा काम करता है।
Tresf

37

आप निम्न जाँच को पूरा करके Windows PowerShell संस्करण स्थापित कर सकते हैं:

  1. प्रारंभ पर क्लिक करें, सभी प्रोग्राम पर क्लिक करें, सहायक उपकरण पर क्लिक करें, Windows PowerShell पर क्लिक करें और फिर Windows PowerShell पर क्लिक करें।
  2. Windows PowerShell कंसोल में, कमांड प्रॉम्प्ट पर निम्न कमांड टाइप करें और फिर ENTER दबाएँ:

    Get-Host | Select-Object Version

आप आउटपुट को देखेंगे जो इस तरह दिखता है:

Version
-------
3.0

http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/


1
आप मान लेते हैं कि पॉवरशेल डिफ़ॉल्ट विकल्पों के साथ स्थापित किया गया था और शॉर्टकट को स्टार्ट मेनू से नहीं हटाया गया था। रजिस्ट्री परीक्षण का उपयोग करने के लिए बेहतर है।
Xalorous

मुझे लगता है कि यदि आपको पहले PowerShell का उपयोग करने की आवश्यकता है, तो आप इसे मानक के रूप में चलाने की कोशिश करें क्योंकि इसे स्थापित किया जाना चाहिए, फिर यदि आप आइकन को खोजने की कोशिश नहीं करते हैं, तो हो सकता है कि आप इसे कमांड प्रॉम्प्ट से चलाने का प्रयास करें। मुझे नहीं लगता कि आप रजिस्ट्री से शुरू करते हैं।
ग्रहण

6
स्वीकृत उत्तर बताता है "... $ Host.Version और (Get-Host) ।Version विश्वसनीय नहीं हैं - वे केवल होस्ट के संस्करण को दर्शाते हैं, इंजन को नहीं"
पीटर मोर्टेंसन

21

PowerShell स्थापित है और स्थापित संस्करण का निर्धारण दो विशिष्ट रजिस्ट्री कुंजियों को देखने के लिए है या नहीं इसकी जाँच के लिए Microsoft की अनुशंसित फ़ॉरवर्ड संगत विधि है । लिंक के टूटने की स्थिति में मैंने यहाँ विवरण पुन: प्रस्तुत किया है।

लिंक्ड पेज के अनुसार:

किसी भी अन्य रजिस्ट्री कुंजी (ओं), या PowerShell.exe के संस्करण या PowerShell.exe के स्थान के आधार पर लंबी अवधि में काम करने की गारंटी नहीं है।

यह जाँचने के लिए किसी भी संस्करण PowerShell का स्थापित किया गया है, रजिस्ट्री में निम्न मूल्य के लिए जाँच करें:

  • मुख्य स्थान: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • मान नाम: स्थापित करें
  • मान प्रकार: REG_DWORD
  • मूल्य डेटा: 0x00000001 (1)

यह जाँचने के लिए कि PowerShell का संस्करण 1.0 या 2.0 स्थापित है या नहीं , रजिस्ट्री में निम्न मान की जाँच करें:

  • मुख्य स्थान: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • मान का नाम: PowerShellVersion
  • मान प्रकार: REG_SZ
  • मान डेटा: <1.0 | 2.0>

5
PowerShell 3.0 के लिए, एक नया प्रतीत होता है, HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3
पीटर मोर्टेंसन

11

अगर स्थापित किया गया था, तो मुझे यह जांचने का सबसे आसान तरीका मिला:

  • कमांड प्रॉम्प्ट चलाएँ (प्रारंभ करें, चलाएँ cmd, फिर ठीक है)
  • टाइप करें powershellफिर हिट। फिर आपको PowerShell PSप्रॉम्प्ट प्राप्त करना चाहिए :

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फिर से यदि आप कमांड प्रॉम्प्ट को भी बंद करना चाहते हैं)।

स्क्रिप्ट चलाने के लिए, http://ss64.com/ps/syntax-run.html देखें


3
के लिए की तरह स्वीकार किए जाते हैं जवाब इस PowerShell 1.0 के लिए कुछ भी वापस नहीं करता है। रजिस्ट्री पद्धति अधिक स्पष्ट है।
पीटर मोर्टेंसन

4
यदि पॉवरशेल रास्ते में नहीं था, तो यह संस्करण गलत धारणा देगा कि यह स्थापित नहीं है। रजिस्ट्री पद्धति पूरी जानकारी देती है। उपस्थिति और संस्करण।
Xalorous

9

$host.versionसिर्फ सादा गलत / अविश्वसनीय है। यह आपको होस्टिंग निष्पादन योग्य (पावरशेल। Exe, powergui.exe, powerhell_ise.exe, powerhellplusplus.exe आदि) का संस्करण देता है कि इंजन का संस्करण।

इंजन संस्करण में निहित है $psversiontable.psversion। PowerShell 1.0 के लिए, यह चर मौजूद नहीं है, इसलिए जाहिर है कि यदि यह चर उपलब्ध नहीं है तो इंजन 1.0 है, यह स्पष्ट रूप से मान लेना पूरी तरह से सुरक्षित है।


9

उपयोग:

$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 संस्करण का निर्धारण कैसे करें से विस्तृत स्क्रिप्ट डाउनलोड कर सकते हैं ।


8

इस पृष्ठ को भूलने का और कभी न लौटने का सबसे आसान तरीका है Get-Variable:

Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}

हर वेरिएबल को याद रखने की जरूरत नहीं है। बस Get-Variableपर्याप्त है (और "संस्करण के बारे में कुछ होना चाहिए")।


8
जो $PSVersionTable
orad के

6
पुनश्च संस्करण के लिए खोज रहे हैं? $ PSVersion [टैब] [दर्ज करें] टाइप करें। किया हुआ। कुछ भी याद रखने की जरूरत नहीं है :)
पिताजी

1
यह वास्तव में केवल तभी उपयोगी होता है जब कोई पाइपिंग ट्रिक्स से परिचित हो जो उपयोग किया जाता है। किसी भी तरह से एक शुरुआत याद करने में सक्षम होने जा रही है कि सब कुछ सिंटैक्स $ PSVersionTable को याद करने की तुलना में आसान है
जोसेफ गेब्रियल

1
दोस्तों, गेट-वेरिएबल अकेले अच्छी तरह से काम करता है (यदि आपको केवल संस्करण प्राप्त करने की आवश्यकता है), तो वहां पाइपिंग करना सिर्फ एक मजाक है :) मुझे या तो पाइपिंग सिंटैक्स याद नहीं है।
रोमन पोक्रोवस्कीज

7

यह जाँचने के लिए कि पॉवरशेल स्थापित है या नहीं:

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

स्रोत: इस वेबसाइट


7

चूँकि सबसे उपयोगी उत्तर पते का मौजूद नहीं था , इसलिए मैंने सोचा कि मैं एक त्वरित और गंदे समाधान के माध्यम से इसे ले जाऊंगा। यह पथ के वातावरण चर में पावरशेल पर निर्भर करता है, जो संभवतः आप चाहते हैं। (हैट टिप टॉप जवाब के रूप में मुझे नहीं पता था।) इसे एक टेक्स्ट फ़ाइल में पेस्ट करें और इसे नाम दें

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

4

मुझे 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"
}


1

यह "बैच फ़ाइल पॉवरशेल संस्करण प्राप्त करें" के लिए शीर्ष खोज परिणाम है, इसलिए मैं एक मूल उदाहरण प्रदान करना चाहूंगा कि कैसे पॉवरशेल संस्करण के आधार पर एक बैच फ़ाइल में सशर्त प्रवाह करना है

सामान्य उदाहरण

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
)

0

आप PowerShell कमांडलाइन से "होस्ट" कमांड को भी कॉल कर सकते हैं। यह आपको $hostचर का मूल्य देना चाहिए ।


3
यह अर्ध-गलत है। hostको हल करता है Get-Host। भले ही, यह संस्करण प्राप्त करने के लिए एक विश्वसनीय तरीका नहीं है।
मैक्सिमिलियन बर्स्ज़ले

-1

एक चयनित ऑपरेटर के साथ उत्तर का विस्तार:

Get-Host | select {$_.Version}

7
स्वीकृत उत्तर बताता है "... $ Host.Version और (Get-Host) ।Version विश्वसनीय नहीं हैं - वे केवल होस्ट के संस्करण को दर्शाते हैं, इंजन को नहीं"
पीटर मोर्टेंसन

@PeterMortensen ऐसा लगता है कि मेरा उत्तर स्वीकार किए जाने से पहले था
HaBo

2
@ हआबो क्या देख रहे हो? स्वीकृत उत्तर 2009 से है।
18

@TylerH तो क्या? मैं आपके सवाल का पालन नहीं कर रहा हूं। मेरा उत्तर स्पष्ट रूप से स्वीकृत उत्तर के विस्तार को कहता है। इसका सरलीकृत संस्करण है।
HaBo

2
@HaBo आपकी पिछली टिप्पणी यह ​​पढ़ती है कि आप अपने उत्तर को इस तथ्य से उचित ठहरा रहे हैं कि यह स्वीकृत उत्तर से पहले पोस्ट किया गया था, जो कि बिल्कुल भी नहीं है। स्वीकृत उत्तर के 7 साल बाद आपका उत्तर पोस्ट किया गया था, और उत्तर के 6 साल बाद आपका वास्तव में 'विस्तार' हुआ; जिस पर बोलते हुए, आपका उत्तर स्पष्ट रूप से यह नहीं कहता है कि यह स्वीकृत उत्तर का विस्तार है (जो उपयोग भी नहीं करता है Get-Host)।
टायलरएच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.