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




(16)

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


PowerShell संस्करण के विवरण प्राप्त करने के लिए Get-Host का उपयोग Get-Host :

PS C:\Users\ashash001c> Get-Host

Name             : ConsoleHost
Version          : 2.0
InstanceId       : ##################################
UI               : System.Management.Automation.Internal.Host.InternalHostUserI
                   nterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

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


आप निर्मित चर, $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    

आम तौर पर आप इसे उस मेजर नंबर का उपयोग करते हैं जिसे आप इस तरह प्राप्त कर सकते हैं:

$PSVersionTable.PSVersion.Major

उपयोग:

$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-Host | select {$_.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

निम्न आदेश के साथ इसे आज़माएं:

Get-Host

here देखा


बस यहाँ मेरे 2 सेंट जोड़ना चाहते हैं।

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

powershell -Command "$PSVersionTable.PSVersion"

संपादित करें:

@psaul मुताबिक आप वास्तव में एक कमांड कर सकते हैं जो @psaul है जहां से यह आया (सीएमडी, पावरहेल या पीडब्ल्यूएस), इसके लिए धन्यवाद।

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

मैंने परीक्षण किया है और यह दोनों सीएमडी और पावरहेल पर बेकार ढंग से काम किया है


मुझे पीएस के संस्करण की जांच करने और फिर उचित कोड चलाने की आवश्यकता थी। हमारे कुछ सर्वर v5 चलाते हैं, अन्य v4। इसका मतलब है कि कुछ फ़ंक्शन, जैसे संपीड़न, उपलब्ध हो सकते हैं या नहीं भी हो सकते हैं।

यह मेरा समाधान है:

if ($PSVersionTable.PSVersion.Major -eq 5) {
    #Execute code available in 5, like Compress
    Write-Host "You are running version 5"
}
else {
    #Use a different process
    Write-Host "This is version $PSVersionTable.PSVersion.Major"
}

मैं या तो 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

यह जांचने के लिए कि PowerShell इंस्टॉल किया गया है या नहीं:

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

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


Get-Host कमांड का प्रयोग करें। परिणाम की दूसरी पंक्ति संस्करण है।


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>

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

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


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

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

PS C:\> $PSVersionTable.PSVersion

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




powershell