tra-loi-cau-hoi-phat-trien-web.com

Xác định phiên bản PowerShell đã cài đặt

Làm cách nào tôi có thể xác định phiên bản PowerShell nào được cài đặt trên máy tính và thực sự nếu nó được cài đặt?

2272
MagicAndi

Sử dụng $PSVersionTable.PSVersion để xác định phiên bản động cơ. Nếu biến không tồn tại, có thể giả định rằng động cơ là phiên bản 1.0.

Lưu ý rằng $Host.Version(Get-Host).Version không đáng tin cậy - chúng phản ánh Chỉ phiên bản của Máy chủ lưu trữ, không phải động cơ. PowerGUI, ..

PS C:\> $PSVersionTable.PSVersion

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

Tôi sẽ sử dụng Get-Host hoặc $ PSVersionTable. Như Andy Schneider chỉ ra, $PSVersionTable không hoạt động trong phiên bản 1; nó đã được giới thiệu trong phiên bản 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
400
Thomas Bratt

Để xác định xem PowerShell đã được cài đặt chưa, bạn có thể kiểm tra sổ đăng ký để biết sự tồn tại của 

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

và, nếu nó tồn tại, cho dù giá trị là 1 (để cài đặt), như được nêu chi tiết trong bài đăng trên blog Kiểm tra xem PowerShell đã cài đặt và phiên bản.

Để xác định phiên bản PowerShell đã được cài đặt, bạn có thể kiểm tra các khóa đăng ký 

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

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

Để xác định phiên bản PowerShell được cài đặt từ tập lệnh .ps1, bạn có thể sử dụng một lớp lót sau, như chi tiết trên PowerShell.com trong Phiên bản PowerShell nào tôi đang chạy.

$isV2 = test-path variable:\psversiontable

Trang web tương tự cũng cung cấp một chức năng để trả về phiên bản:

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

Bạn có thể nhìn vào biến tích hợp, $psversiontable. Nếu nó không tồn tại, bạn có V1. Nếu nó tồn tại, nó sẽ cung cấp cho bạn tất cả thông tin bạn cần.

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    
88
Andy Schneider

Chỉ muốn thêm 2 xu của tôi ở đây.

Bạn chỉ có thể kiểm tra trực tiếp phiên bản với một dòng bằng cách gọi powershell bên ngoài, chẳng hạn như từ Dấu nhắc lệnh

powershell -Command "$PSVersionTable.PSVersion"

CHỈNH SỬA:

Theo @psaul you can thực sự có một lệnh bất khả tri từ nơi nó đến (CMD, Powershell hoặc Pwsh), cảm ơn bạn vì điều đó.

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

Tôi đã thử nghiệm và nó hoạt động hoàn hảo trên cả CMD và Powershell

 image

32
Patrick Bard

Bạn có thể xác minh rằng phiên bản Windows PowerShell được cài đặt bằng cách hoàn thành kiểm tra sau:

  1. Bấm Bắt đầu, bấm Tất cả Chương trình, bấm Phụ kiện, bấm Windows PowerShell, rồi bấm Windows PowerShell.
  2. Trong bảng điều khiển Windows PowerShell, nhập lệnh sau vào lệnh Nhắc và sau đó nhấn ENTER:

    Nhận máy chủ | Phiên bản chọn đối tượng

Bạn sẽ thấy đầu ra trông như thế này:

Version
-------
3.0

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

22
Eclipses

Phương pháp tương thích chuyển tiếp được khuyến nghị của Microsoft để kiểm tra xem PowerShell đã được cài đặt chưa và xác định phiên bản đã cài đặt là xem xét hai khóa đăng ký cụ thể. Tôi đã sao chép các chi tiết ở đây trong trường hợp liên kết bị đứt.

Theo trang được liên kết:

Tùy thuộc vào bất kỳ khóa đăng ký nào khác, hoặc phiên bản PowerShell.exe hoặc vị trí của PowerShell.exe không được đảm bảo để hoạt động lâu dài.

Để kiểm tra xem bất kỳ phiên bản nào của PowerShell đã được cài đặt hay chưa, hãy kiểm tra giá trị sau trong sổ đăng ký:

  • Vị trí chính: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • Tên giá trị: Cài đặt
  • Loại giá trị: REG_DWORD
  • Dữ liệu giá trị: 0x00000001 (1

Để kiểm tra liệu phiên bản 1.0 hoặc 2.0 của PowerShell đã được cài đặt hay chưa, hãy kiểm tra giá trị sau trong sổ đăng ký:

  • Vị trí chính: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • Tên giá trị: PowerShellVersion
  • Loại giá trị: REG_SZ
  • Dữ liệu giá trị: <1.0 | 2.0>
19
Starfish

Tôi tìm thấy cách dễ nhất để kiểm tra nếu cài đặt là:

  • chạy lệnh Nhắc (Bắt đầu, Chạy, cmd, sau đó OK)
  • powershell sau đó nhấn return. Sau đó, bạn sẽ nhận được PowerShell PS Nhắc:

C:\Users\MyUser>powershell

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

PS C:\Users\MyUser>

Sau đó, bạn có thể kiểm tra phiên bản từ Dấu nhắc PowerShell bằng cách nhập $PSVersionTable.PSVersion:

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

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

PS C:\Users\MyUser>

Nhập exit nếu bạn muốn quay lại lệnh Prompt (exit một lần nữa nếu bạn cũng muốn đóng lệnh Prompt).

Để chạy tập lệnh, hãy xem http://ss64.com/ps/syntax-run.html .

11
SharpC

$Host.version hoàn toàn sai/không đáng tin cậy. Điều này cung cấp cho bạn phiên bản lưu trữ thực thi (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe, v.v.) và không phiên bản của chính động cơ.

Phiên bản động cơ được chứa trong $psversiontable.psversion. Đối với PowerShell 1.0, biến này không tồn tại, vì vậy rõ ràng nếu biến này không có sẵn, thì hoàn toàn an toàn khi giả sử động cơ là 1.0, rõ ràng.

9
x0n

Sử dụng:

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

Bạn có thể tải xuống tập lệnh chi tiết từ Cách xác định phiên bản PowerShell đã cài đặt.

9
Dale Chen

Để kiểm tra xem PowerShell đã được cài đặt chưa, hãy sử dụng:

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

Để kiểm tra xem RC2 hoặc RTM đã được cài đặt chưa, hãy sử dụng:

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

Nguồn: trang web này .

7
Daniel Elliott

Cách dễ nhất để quên trang này và không bao giờ quay lại trang đó là tìm hiểu Get-Variable

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

Không cần phải nhớ mọi biến. Chỉ cần Get-Variable là đủ (và "Cần có một cái gì đó về phiên bản"). 

6
Roman Pokrovskij

Vì câu trả lời hữu ích nhất không giải quyết được phần nếu tồn tại, tôi nghĩ rằng tôi sẽ đưa ra một giải pháp thông qua giải pháp nhanh và bẩn. Nó dựa vào PowerShell trong biến đường dẫn môi trường có khả năng là những gì bạn muốn. (Mẹo về câu trả lời hàng đầu vì tôi không biết điều đó.) Dán tệp này vào tệp text và đặt tên cho nó

Kiểm tra phiên bản Powershell.cmd

hoặc tương tự.

@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
6
Pecos Bill

Lệnh dưới đây sẽ trả về phiên bản PowerShell.

$PSVersionTable.PSVersion.Major
3
Venkatakrishnan

Tôi cần kiểm tra phiên bản PS và sau đó chạy mã thích hợp. Một số máy chủ của chúng tôi chạy v5, số khác v4. Điều này có nghĩa là một số chức năng, như nén, có thể có hoặc không có sẵn.

Đây là giải pháp của tôi: 

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"
}
3
Atron Seige

Bạn cũng có thể gọi lệnh "Máy chủ" từ dòng lệnh PowerShell. Nó sẽ cung cấp cho bạn giá trị của biến $Host.

2
Tylor Durden

Đây là kết quả tìm kiếm hàng đầu cho "Batch file get phiên bản powershell", vì vậy tôi muốn cung cấp một ví dụ cơ bản về cách thực hiện luồng có điều kiện trong một tệp bó tùy thuộc vào phiên bản powershell

Ví dụ chung

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.
)

Ví dụ trong thế giới thực

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
)
1
Derpy

Thông thường bạn có được nó bằng cách sử dụng Số chính mà bạn có thể nhận được như thế này:

$PSVersionTable.PSVersion.Major
1
Jose Ortega

Mở rộng câu trả lời với toán tử chọn:

Get-Host | select {$_.Version}
1
HaBo

Hãy thử nó với lệnh sau:

Get-Host

Nhìn thấy ở đây

0
user2366586