Soru Kurulu PowerShell sürümünü belirle


Bir bilgisayarda hangi PowerShell sürümünün yüklü olduğunu ve gerçekten kuruluysa nasıl belirleyebilirim?


2085
2017-12-01 11:30


Menşei


Suçlu, bu soruyu sormak zorundadır. Microsoft, yüklü tüm yazılımların en son sürümünü bulmak için tutarlı bir yol sağlamalıdır. - user1040323
Bu tutarlı bir şekilde bir paket yöneticisi, linux'u kullanmak için her seferinde keyif aldığım bir şey olurdu. - aaaaaa


Cevaplar:


kullanım $PSVersionTable.PSVersion Motor versiyonunu belirlemek. Değişken mevcut değilse, motorun versiyon olduğunu varsaymak güvenlidir. 1.0.

Bunu not et $Host.Version ve (Get-Host).Version güvenilir değildir - yansıtırlar yalnızca ana bilgisayarın sürümü değil, motor. PowerGUI, PowerShellPLUS, vb. Tüm hosting uygulamalarıdır. ev sahibinin ürününü kendi ürünlerini yansıtacak şekilde ayarlayacaklar sürüm - tamamen doğru, ama aradığınız şey değil.

PS C:\> $PSVersionTable.PSVersion

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

2802
2018-01-19 11:06



Hmm ... bu son yorumu kazıyın. PS2'nin kurulu olduğu, ancak bazı özelliklerin yanlışlıkla kullanılamayacağı ve bazı nedenlerden dolayı kurulum dizininin '1.0' olduğu görülüyor. Microsoft'a teşekkürler. - Daniel Cassidy
$PSVersionTable daha güvenilir ve $ PSVersion döndürür. Ayrıca kullanabilirsiniz $PSVersionTable.PSVersion. Farklı versiyonları çalıştıran makineye uzaktan bağlı olsanız bile (invoke-command -computername myRemotePC -Credential foo {$host}) gibi görünüyor $host sadece serileştirmek için üzerinde anlaştıkları en düşük sürümü gösterecek. Süre $PSVersionTable gerçek sürümü gösterecektir. Umarım birisine yardım eder. - vulcan raven
$ Host.Version iyi bir seçim değil görünüyor ... Eğer PowerShell 3 çalıştıran bir makine uzaktan, RemotingHost v1 gibi görünüyor, geri 1.0 olsun. $ PSVersionTable'ı kullanmak doğru şekilde 3 değerini döndürür. - Danny Tuppeny
-1 Bu, PowerShell'in orijinal soruda sorulduğu gibi kurulup kurulmadığını nasıl belirleyeceğine cevap vermiyor. Microsoft kayıt defterini denetlemenizi önerir Varsa hangi sürümün yüklü olduğunu görmek için Bağlantılı sayfada belirtildiği gibi, bu yöntem uzun vadede çalışmayı garantileyen tek yöntemdir. - Starfish
@Starfish Gösterilen komut, Komut İstemi'ni kullanarak Powershell'i başlatır. Yüklenmemişse, komut sadece "powershell not found" ile hata yapmaz mı? - jpmc26


Ya kullanırım Get-Sunucu veya $ PSVersionTable. Andy Schneider'in belirttiği gibi, $PSVersionTable sürüm 1'de çalışmıyor; 2. versiyonda tanıtıldı.

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

371
2017-12-01 11:34



teşekkür ederim! Not: el ile v1 Powershell, gerçek klasör ve kayıt defteri yolları (yanıltıcı ?!) referans v1 DEĞİL v2 el ile yükseltilmiş XP'mde. Bu, diğerlerinin de belirttiği gibi, ancak onu yüklemiş olmama neden bu kadar endişelendim. Benim yolum; C: \ WINDOWS \ system32 \ WindowsPowerShell v1.0 \ - AnneTheAgile
$ Psversiontable mevcut değilse, v1.0 üzerinde olduğunuzu varsaymak tamamen güvenli - ve bu da sorunuzu yanıtlayan hey. $host.version güvenilir değil - örneğin powergui'de, powershell motor sürümü ile aynı olmayan powergui ana bilgisayar sürümünü döndürür (istediğinizi). - x0n
Güzel. En büyük sürümü almak bile çoğu zaman get-host cmdlet'inden fazlasıyla yeterli. - RBT
Kabul edilen cevap durumları "... $ Host.Version ve (Get-Host) .Version güvenilir değil - onlar sadece ev sahibi değil, motorun versiyonunu yansıtır". - Peter Mortensen


PowerShell'in yüklü olup olmadığını belirlemek için, kayıt defterini kontrol edebilirsiniz.

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

ve

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

Varsa, blog yayınında ayrıntılandırıldığı gibi, değerin 1 (yüklü olduğu) olup olmadığı PowerShell'in yüklü olup olmadığını kontrol edin.

Yüklü PowerShell sürümünü belirlemek için kayıt defteri anahtarlarını denetleyebilirsiniz.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion

ve

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion

Bir .ps1 komut dosyasından yüklenen PowerShell sürümünü belirlemek için, PowerShell.com'da açıklandığı gibi aşağıdaki tek lineli kullanabilirsiniz. Hangi PowerShell Sürümü Çalışıyor.

$isV2 = test-path variable:\psversiontable

Aynı site aynı zamanda sürümü döndürmek için bir işlev de verir:

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

87
2017-12-01 14:37



Bir Windows 2003 sunucusunda PowerShell için başlangıç ​​menüsü girişini bulamadığım için kullanışlıdır (ancak orada açık değil), ancak kayıt defteri anahtarı sorumu yanıtladı. - Holistic Developer
+1. Bu aynı zamanda Microsoft'un önerdiği yöntem tespit için. - Starfish
PowerScript 3.0 için yeni bir giriş var gibi görünüyor. Microsoft \ PowerShell \ 3 \ HKEY_LOCAL_MACHINE \ SOFTWARE (ek olarak Microsoft \ PowerShell \ 1 \ HKEY_LOCAL_MACHINE \ SOFTWARE). Bu durumda sürümü almak için uygun yer gibi görünüyor HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3 \ PowerShellEngine \ PowerShellVersion (örnek değer "3.0" dir). - Peter Mortensen


Yerleşik değişkene bakabilirsiniz. $psversiontable. Eğer mevcut değilse, V1'iniz var. Varsa, ihtiyacınız olan tüm bilgileri size verecektir.

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    

77
2018-04-25 13:47





Sadece 2 sentimi buraya eklemek istiyorum.

Sürümünü, yalnızca powershell'i çağırarak bir satırda kontrol edebilirsiniz. haricenKomut İstemi gibi

powershell -Command "$PSVersionTable.PSVersion"

DÜZENLE:

Göre @psaul sen kutu Aslında geldiği yerden (CMD, Powershell veya Pwsh) gelen bir komut var, bunun için teşekkürler.

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

Test ettim ve hem CMD hem de Powershell'de kusursuz çalıştı

image


23
2018-03-10 11:32



Ben bu korkunç hata ile deneyin: "System.Collections.Hashtable.PSVersion: 'System.Collections.Hashtable.PSVersion' terimi bir cmdlet, işlev, komut dosyası veya çalıştırılabilir programın adı olarak tanınmadı. adın yazımı veya bir yol eklenmişse, yolun doğru olduğunu doğrulayın ve tekrar deneyin. " Yani her zaman işe yaramaz - Gonmator
Köşe davalarını bilmenin iyi olduğunu düşündüğünüze sevindim, ama sanırım hala insanların çoğunluğu için çalışıyor. - Patrick Bard
@tresf daha fazla yanlış anlaşılmayı önlemek için cevabımdaki kelimelerinizi kullanmamı sağlayın. - Patrick Bard
@PatrickBard, lütfen yapın. - tresf
@tresf (ve @Gonmator) bu agnostik olarak CMD, PowerShell veya hatta Pwsh (PS 6.0) çalıştırabilirsiniz ancak bu formu kullanmanız gerekir: powershell -command "(Get-Variable PSVersionTable -ValueOnly) .PSVersion" ( her durumda çalışmak - PSaul


Windows PowerShell sürümünün aşağıdaki denetimi tamamlayarak yüklendiğini doğrulayabilirsiniz:

  1. Başlat 'ı tıklatın, Tüm Programlar' ı tıklatın, Donatılar 'ı tıklatın, Windows PowerShell' i tıklatın ve sonra Windows PowerShell 'i tıklatın.
  2. Windows PowerShell konsolunda, komut isteminde aşağıdaki komutu yazın ve ENTER tuşuna basın:

    Get-Host | Nesne Seçimi Sürümü

Buna benzeyen çıktıyı göreceksiniz:

Version
-------
3.0

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


19
2018-06-17 07:59



Bu powershell'in varsayılan seçeneklerle yüklendiğini ve kısayolların Başlat Menüsü'nden kaldırılmadığını varsayıyorsunuz. Kayıt defteri testini kullanmak daha iyidir. - Xalorous
PowerShell'i kullanmanız gerekiyorsa, önce standart olarak çalıştırılmaya çalışılmalı, eğer simgeyi bulamazsanız aramayı deneyin, belki de Komut İstemi'nden çalıştırmayı deneyebilirsiniz. Kayıttan başladığını sanmıyorum. - Eclipses
Kabul edilen cevap durumları "... $ Host.Version ve (Get-Host) .Version güvenilir değil - onlar sadece ev sahibi değil, motorun versiyonunu yansıtır". - Peter Mortensen


Microsoft'un, PowerShell'in yüklü olup olmadığını ve kurulu sürümü belirleyip belirlemediğini kontrol etmek için ileriye dönük önerilen yöntem önerilir. iki özel kayıt defteri anahtarına bakmaktır. Bağlantı koptuğunda ayrıntıları burada tekrar ettik.

Bağlı sayfaya göre:

Başka bir kayıt defteri anahtarına / anahtarlarına veya PowerShell.exe sürümüne veya PowerShell.exe dosyasının konumuna bağlı olarak uzun vadede çalışması garanti edilmez.

Kontrol etmek için herhangi bir versiyon PowerShell yüklendi, kayıt defterinde aşağıdaki değeri denetleyin:

  • Anahtar Yer: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • Değer Adı: Yükle
  • Değer Türü: REG_DWORD
  • Değer Verisi: 0x00000001 (1

Kontrol etmek sürüm 1.0 veya 2.0 PowerShell yüklendi, kayıt defterinde aşağıdaki değeri denetleyin:

  • Anahtar Yer: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • Değer Adı: PowerShellVersion
  • Değer Türü: REG_SZ
  • Değer Verileri: <1.0 | 2.0>

18
2017-11-04 10:24



PowerShell 3.0 için yeni bir tane var gibi görünüyor. Microsoft \ PowerShell \ 3 \ HKEY_LOCAL_MACHINE \ SOFTWARE. - Peter Mortensen
Bu win7 üzerinde çalışmıyor. Powershell kayıt defteri anahtarlarının şimdi kaldırıldığına inanıyorum. - N-ate


Yüklü olup olmadığını kontrol etmenin en kolay yolunu buldum:

  • Bir komut istemi çalıştırın (Başlat, Çalıştır, cmd, O halde tamam)
  • tip powershell sonra geri dönüşe basın. Daha sonra PowerShell'i almalısınız. PS Komut istemi:

C:\Users\MyUser>powershell

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\MyUser>

Daha sonra, yazarak PowerShell isteminden sürümü kontrol edebilirsiniz. $PSVersionTable.PSVersion:

PS C:\Users\MyUser> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1

PS C:\Users\MyUser>

tip exit Komut istemine geri dönmek isterseniz (exit Ayrıca komut istemini kapatmak isterseniz de).

Komut dosyalarını çalıştırmak için bkz. http://ss64.com/ps/syntax-run.html.


11
2017-11-01 01:41



Gibi kabul edilen cevap  Bu PowerShell 1.0 için hiçbir şey döndürmez. Kayıt yöntemi daha açık. - Peter Mortensen
Powershell yolda değilse, bu sürüm yüklü olmadığı konusunda yanlış bir izlenim verecektir. Kayıt defteri yöntemi tam bilgi verir. Durum ve versiyon - Xalorous


kullanın:

$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'}
}

Detaylı komut dosyasını buradan indirebilirsiniz. Yüklü PowerShell sürümü nasıl belirlenir.


9
2017-12-01 11:35





PowerShell'in kurulu olup olmadığını kontrol etmek için:

HKLM\Software\Microsoft\PowerShell\1 Install ( = 1 )

RC2 veya RTM'nin kurulu olup olmadığını kontrol etmek için:

HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-00301) -- For RC2
HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-04309) -- For RTM

Kaynak: bu web sitesi.


8
2018-04-17 20:46



PowerShell'in ps1 komut dosyası kullanmadan kurulup kurulmadığını kontrol etmek için en iyi yol hangisidir? Belki C # kodu kullanarak, tam kaynak kod örneği yararlı olurdu. - Kiquenet


$host.version sadece düz yanlış / güvenilmez. Bu size, barındırma yürütülebilir (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe vb.) Sürümünü verir. değil motorun kendisinin sürümü.

Motor versiyonu $psversiontable.psversion. PowerShell 1.0 için, bu değişken mevcut değildir, bu nedenle, bu değişken mevcut değilse, açık bir şekilde motorun 1.0 olduğunu varsaymak tamamen güvenlidir.


7
2018-03-18 23:44