ตรวจสอบรุ่น PowerShell ที่ติดตั้ง


2632

ฉันจะทราบได้อย่างไรว่า 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 Compact Framework แทนที่จะเป็นแบบเต็ม
Dave Neeley

83
$PSVersionTableมีความน่าเชื่อถือมากกว่าและให้ผลตอบแทน $ PSVersion $PSVersionTable.PSVersionนอกจากนี้คุณยังสามารถใช้ แม้ว่าคุณจะเชื่อมต่อจากระยะไกลไปยังเครื่องที่ใช้รุ่นอื่น ( invoke-command -computername myRemotePC -Credential foo {$host}) ดูเหมือนว่า$hostจะแสดงรุ่นต่ำสุดที่พวกเขาเห็นด้วยสำหรับการทำให้เป็นอนุกรม ในขณะที่$PSVersionTableจะแสดงเวอร์ชั่นจริง หวังว่ามันจะช่วยใครซักคน ..
ราวัลกา

16
ดูเหมือนว่า $ host.Version ไม่ใช่ตัวเลือกที่ดี ... หากคุณอยู่ห่างไกลไปยังเครื่องที่ใช้ PowerShell 3 คุณจะได้รับ 1.0 คืนเนื่องจาก RemotingHost น่าจะเป็น v1 การใช้ $ PSVersionTable ให้ผลตอบแทนที่ถูกต้อง 3
Danny Tuppeny

25
@Starfish คำสั่งที่แสดงเปิดตัว Powershell โดยใช้ Command Prompt คำสั่งจะไม่ผิดพลาดโดยใช้ "powershell ไม่พบ" หากยังไม่ได้ติดตั้ง
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
ขอบคุณ! หมายเหตุ: ใน XP ของฉันที่ฉันอัพเกรดด้วยตนเองจาก v1 Powershell โฟลเดอร์จริงและเส้นทางรีจิสทรี (ทำให้เข้าใจผิด?!) อ้างอิง v1 NOT v2 นี่คือสิ่งที่คนอื่น ๆ ที่นี่ระบุ แต่มันเป็นสาเหตุที่ทำให้ฉันเป็นห่วงว่าจะติดตั้งมันหรือไม่ เส้นทางของฉันคือ; C: \ WINDOWS \ system32 \ windowspowershell \ v1.0
AnneTheAgile

4
ถ้า $ psversiontable ไม่มีอยู่มันปลอดภัยอย่างยิ่งที่จะสมมติว่าคุณอยู่ใน v1.0 - และ hey presto นั่นก็ตอบคำถามของคุณเช่นกัน $host.versionไม่น่าเชื่อถือ - ตัวอย่างเช่นใน powergui จะส่งคืนรุ่นโฮสต์ powergui ซึ่งไม่เหมือนกับรุ่นเครื่องยนต์ powershell (ซึ่งเป็นสิ่งที่ต้องการ)
x0n

10
คำตอบที่ได้รับการยอมรับรัฐ"... $ Host.Version และ (รับเป็นเจ้าภาพ) .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

เมื่อต้องการตรวจสอบว่ามีการติดตั้ง PowerShell หรือไม่คุณสามารถตรวจสอบรีจิสทรีเพื่อดูว่ามีอยู่หรือไม่

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

ตรวจสอบรุ่นของ PowerShell ที่ติดตั้งจากสคริปต์ .ps1 คุณสามารถใช้ต่อไปนี้หนึ่งซับตามรายละเอียดใน PowerShell.com ในซึ่ง PowerShell เวอร์ชัน Am I วิ่ง

$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")
ปีเตอร์มอร์เทนเซ่น

48

คุณสามารถตรวจสอบเวอร์ชั่นโดยตรงด้วยหนึ่งบรรทัดเท่านั้นโดยเรียกใช้ PowerShell จากภายนอกเช่นจาก Command Prompt

powershell -Command "$PSVersionTable.PSVersion"

ตาม@ psaulคุณสามารถมีหนึ่งคำสั่งที่ไม่เชื่อเรื่องพระเจ้าจากที่มา (CMD, PowerShell หรือ Pwsh) ขอบคุณสำหรับสิ่งนั้น.

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

ฉันทดสอบแล้วและมันทำงานได้อย่างไม่มีที่ติทั้งบน CMD และ PowerShell

ภาพ


ฉันได้รับข้อผิดพลาดที่น่ากลัวนี้เมื่อลอง: "System.Collections.Hashtable.PSVersion: คำว่า 'System.Collections.Hashtable.PSVersion' ไม่รู้จักเป็นชื่อของ cmdlet, ฟังก์ชั่น, ไฟล์สคริปต์หรือโปรแกรมที่ทำงานได้ตรวจสอบ การสะกดชื่อหรือถ้ารวมพา ธ ให้ตรวจสอบว่าพา ธ นั้นถูกต้องแล้วลองอีกครั้ง ". ดังนั้นจึงไม่ได้ผลเสมอไป
Gonmator

ฉันดีใจที่คุณชี้ให้เห็นว่าเนื่องจากเป็นการดีที่จะรู้ว่ามุมกรณี แต่ฉันคิดว่ามันยังคงทำงานได้สำหรับคนส่วนใหญ่
Patrick Bard

@Gonmator คิดว่า PowerShell จะทำงานในลักษณะเดียวกันกับคำสั่งนี้ แต่น่าเสียดายที่ไม่มี ฉันพยายามแก้ไขไวยากรณ์เพื่อให้ทำงาน agnostically ระหว่างcmdและpowershellไม่มีประโยชน์ ฉันคาดว่าจะมีพฤติกรรมเช่นเดียวกันเช่นกัน :)
tresf

3
@tresf (และ @Gonmator) คุณสามารถเรียกใช้ agnostically นี้ได้จาก CMD, PowerShell หรือแม้แต่ Pwsh (PS 6.0) แต่คุณต้องใช้แบบฟอร์มนี้: powershell - คำสั่ง "(Get-Variable PSVersionTable -ValueOnly) ทำงานในทุกกรณี)
PSaul

ทดสอบบน mac ด้วย 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
คุณถือว่า PowerShell ได้รับการติดตั้งด้วยตัวเลือกเริ่มต้นและทางลัดไม่ได้ถูกลบออกจากเมนูเริ่ม ดีกว่าที่จะใช้การทดสอบรีจิสทรี
Xalorous

ฉันคิดว่าถ้าคุณจำเป็นต้องใช้ PowerShell ก่อนอื่นให้ลองเรียกใช้เป็นมาตรฐานควรติดตั้งจากนั้นหากคุณไม่พบไอคอนที่คุณพยายามค้นหามันอาจจะลองเรียกใช้จาก Command Prompt ฉันไม่คิดว่าคุณเริ่มต้นจากรีจิสทรี
Eclipses

6
คำตอบที่ได้รับการยอมรับรัฐ"... $ Host.Version และ (รับเป็นเจ้าภาพ) .Version จะไม่น่าเชื่อถือ - พวกเขาสะท้อนให้เห็นถึงรุ่นของโฮสต์เท่านั้นไม่เครื่องยนต์"
Peter Mortensen

21

วิธีการส่งต่อที่แนะนำของ Microsoft สำหรับการตรวจสอบว่ามีการติดตั้ง PowerShell หรือไม่และการตรวจสอบรุ่นที่ติดตั้งคือการดูคีย์รีจิสตรีเฉพาะสองคีย์ ฉันทำซ้ำรายละเอียดที่นี่ในกรณีที่การเชื่อมโยงแบ่ง

ตามหน้าเชื่อมโยง:

ขึ้นอยู่กับคีย์รีจิสทรีอื่น ๆ หรือรุ่นของ 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
Peter Mortensen

11

ฉันพบวิธีที่ง่ายที่สุดในการตรวจสอบว่าติดตั้งไว้ที่:

  • เรียกใช้พรอมต์คำสั่ง (เริ่มเรียกใช้cmdแล้วตกลง)
  • พิมพ์powershellจากนั้นกดส่งคืน จากนั้นคุณควรได้รับPSพรอมต์PowerShell :

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 วิธีการรีจิสตรีมีความชัดเจนมากขึ้น
Peter Mortensen

4
หาก PowerShell ไม่ได้อยู่ในพา ธ เวอร์ชันนี้จะให้การแสดงผลที่ผิดพลาดซึ่งไม่ได้ติดตั้งไว้ วิธีการรีจิสทรีให้ข้อมูลเต็มรูปแบบ สถานะและเวอร์ชัน
Xalorous

9

$host.versionเป็นเพียงผิดธรรมดา / ไม่น่าเชื่อถือ สิ่งนี้ทำให้คุณมีเวอร์ชันของโฮสติ้งที่ปฏิบัติการได้ (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.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
กำลังมองหาเวอร์ชั่น PS อยู่ใช่ไหม พิมพ์ $ PSVersion [แท็บ] [Enter] เสร็จสิ้น ไม่จำเป็นต้องจำอะไร :)
orad

1
สิ่งนี้มีประโยชน์จริง ๆ ถ้าใครคุ้นเคยกับเทคนิคการใช้ท่อ ไม่มีทางที่ผู้เริ่มต้นจะสามารถจดจำได้ว่าไวยากรณ์ทั้งหมดนั้นง่ายกว่าการจดจำ $ PSVersionTable
โจเซฟกาเบรียล

1
Guys, Get-Variable ทำงานได้ดีเพียงอย่างเดียว (ถ้าทุกอย่างที่คุณต้องการเพียงแค่รับรุ่น), piping มีเพียงเรื่องตลก :) ฉันไม่จำไวยากรณ์ของ piping เช่นกัน
Roman Pokrovskij

7

วิธีตรวจสอบว่าติดตั้ง PowerShell หรือไม่ให้ใช้:

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 ในตัวแปรสภาพแวดล้อมของเส้นทางซึ่งเป็นสิ่งที่คุณต้องการ (หมวกให้คำตอบสูงสุดเพราะฉันไม่รู้) วางสิ่งนี้ลงในไฟล์ข้อความแล้วตั้งชื่อ

ทดสอบ 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" ดังนั้นฉันต้องการให้ตัวอย่างพื้นฐานของวิธีการไหลตามเงื่อนไขในไฟล์แบทช์ขึ้นอยู่กับรุ่น PowerShell

ตัวอย่างทั่วไป

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ไม่ว่าจะเป็นวิธีการรับรุ่นที่เชื่อถือได้ก็ตาม
Maximilian Burszley

-1

การขยายคำตอบด้วยตัวดำเนินการที่เลือก:

Get-Host | select {$_.Version}

7
คำตอบที่ได้รับการยอมรับรัฐ"... $ Host.Version และ (รับเป็นเจ้าภาพ) .Version จะไม่น่าเชื่อถือ - พวกเขาสะท้อนให้เห็นถึงรุ่นของโฮสต์เท่านั้นไม่เครื่องยนต์"
ปีเตอร์มอร์เทนเซ่น

@PeterMortensen ดูเหมือนว่าคำตอบของฉันคือก่อนคำตอบที่ได้รับการยอมรับ
HaBo

2
@HaBo คุณกำลังมองหาอะไร คำตอบที่ได้รับการยอมรับคือตั้งแต่ 2009
TylerH

@TylerH ดังนั้นอะไร ฉันไม่ได้ติดตามคำถามของคุณ คำตอบของฉันชัดเจนบอกว่ามันเป็นส่วนขยายของคำตอบที่ยอมรับ มันเป็นเวอร์ชั่นที่เรียบง่าย
HaBo

2
@HaBo ความคิดเห็นก่อนหน้าของคุณอ่านเหมือนว่าคุณแสดงความชอบธรรมกับคำตอบของคุณเนื่องจากความจริงที่ว่ามันถูกโพสต์ก่อนคำตอบที่ยอมรับซึ่งไม่ได้เป็นอย่างนั้น คำตอบของคุณถูกโพสต์ใน 7 ปีหลังจากคำตอบที่ได้รับการยอมรับและ 6 ปีหลังจากคำตอบของคุณจะขยายออกไป การพูดที่คำตอบของคุณไม่ชัดเจนว่าเป็นส่วนขยายของคำตอบที่ยอมรับ (ซึ่งไม่ได้ใช้Get-Host)
TylerH
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.