admin管理员组文章数量:1516870
问:
如何确定计算机上安装了哪个版本的 PowerShell,以及是否安装了它?
答1:
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
使用 $PSVersionTable.PSVersion 确定引擎版本。如果该变量不存在,则可以安全地假定引擎是版本 1.0。
请注意,$Host.Version 和 (Get-Host).Version 不可靠 - 它们仅反映主机的版本,而不是引擎的版本。 PowerGUI、PowerShellPLUS 等都是托管应用程序,它们会设置主机的版本以反映其产品版本 ——这完全正确,但不是您要查找的。
PSC:\> $PSVersionTable.PSVersionMajorMinorBuildRevision-----------------------40-1-1
@DanielCassidy - 晚了两年,但“某些功能无法解释地不可用”可能是由于只安装了 .Net 3.5 Compact 框架而不是完整的东西。
$PSVersionTable 更可靠并返回 $PSVersion。您也可以使用 $PSVersionTable.PSVersion。即使您远程连接到运行不同版本 (invoke-command -computername myRemotePC -Credential foo {$host}) 的机器,看起来 $host 只会显示他们同意进行序列化的最低版本。而 $PSVersionTable 将显示真实版本。希望它会帮助某人..
似乎 $host.Version 不是一个好的选择...如果您远程连接到运行 PowerShell 3 的机器,您将返回 1.0,因为 RemotingHost 似乎是 v1。正确使用 $PSVersionTable 会返回 3。
@Starfish 显示的命令使用命令提示符启动 Powershell。如果未安装,该命令是否会出现“找不到 powershell”的错误?
厌倦了为此而回到这里,我只是跑了 notepad $profile 并将 function psver { $PSVersionTable; $PSVersionTable.PSVersion } 倾倒在其中。使用 . $profile 重新加载,我可以随时键入 psver 以获取详细的版本信息和其他详细信息。
答2:
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
我会使用 Get-Host 或 P S V e r s i o n T a b l e 。正如 A n d y S c h n e i d e r 指出的那样, PSVersionTable。正如 Andy Schneider 指出的那样, PS V ers i o n T ab l e 。正如 A n d y S c hn e i d er 指出的那样, PSVersionTable 在版本 1 中不起作用;它是在版本 2 中引入的。
get-host
Name:ConsoleHostVersion:2.0InstanceId: d730016e-2875-4b57-9cd6-d32c8b71e18a
UI:System.Management.Automation.Internal.Host.InternalHostUserInterfaceCurrentCulture: en-GBCurrentUICulture: en-USPrivateData:Microsoft.PowerShell.ConsoleHost+ConsoleColorProxyIsRunspacePushed:FalseRunspace:System.Management.Automation.Runspaces.LocalRunspace
$PSVersionTableNameValue---------CLRVersion2.0.50727.4200BuildVersion6.0.6002.18111PSVersion2.0WSManStackVersion2.0PSCompatibleVersions{1.0,2.0}SerializationVersion1.1.0.1PSRemotingProtocolVersion2.1
谢谢你!注意:在我从 v1 Powershell 手动升级的 XP 上,实际的文件夹和注册表路径(误导?!)引用 v1 而不是 v2。这是其他人在这里指定的,但这就是为什么我如此担心我是否安装了它的原因。我的路径是; C:\WINDOWS\system32\windowspowershell\v1.0
如果 $psversiontable 不存在,那么假设您使用的是 v1.0 是完全安全的 - 嘿,这也回答了您的问题。 $host.version 不可靠 - 例如在 powergui 中,它返回与 powershell 引擎版本不同的 powergui 主机版本(这是所需的。)
接受的答案指出“... $Host.Version 和 (Get-Host).Version 不可靠 - 它们仅反映主机的版本,而不是引擎”。
答3:
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
您可以查看内置变量 $psversiontable。如果它不存在,则您拥有 V1。如果它确实存在,它将为您提供所需的所有信息。
1> $psversiontable
NameValue---------CLRVersion2.0.50727.4927BuildVersion6.1.7600.16385PSVersion2.0WSManStackVersion2.0PSCompatibleVersions{1.0,2.0}SerializationVersion1.1.0.1PSRemotingProtocolVersion2.1答4:
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
要确定是否安装了 PowerShell,您可以检查注册表中是否存在
HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3并且,如果存在,该值是否为 1(表示已安装),详见博文 Check if PowerShell installed and version。
要确定安装的 PowerShell 版本,您可以检查注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion要确定从 .ps1 脚本安装的 PowerShell 版本,您可以使用以下单行代码,详细信息请参见 PowerShell.com 中的 Which PowerShell Version Am I Running。
$isV2 = test-path variable:\psversiontable
同一站点还提供了返回版本的功能:
function Get-PSVersion{if(test-path variable:psversiontable){$psversiontable.psversion}else{[version]"1.0.0.0"}}
很有用,因为在 Windows 2003 服务器上我找不到 PowerShell 的开始菜单项(它在那里但不明显),但注册表项回答了我的问题。
对于 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”)。
答5:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
您可以通过外部调用 PowerShell(例如从命令提示符)直接用一行检查版本
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 有人会认为 PowerShell 会以与此命令相同的方式运行,但不幸的是它不会。我尝试修复语法以在 cmd 和 powershell 之间不可知地工作,但无济于事。我也会期待同样的行为。 :)
@tresf(和@Gonmator)您可以从 CMD、PowerShell 甚至 Pwsh(PS 6.0)不可知地运行它,但您需要使用这种形式:powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"(这将适用于所有情况)
也在mac上测试过。 pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion" 效果很好。
答6:
huntsbot.com – 高效赚钱,自由工作
您可以通过完成以下检查来验证是否安装了 Windows PowerShell 版本:
单击开始,单击所有程序,单击附件,单击 Windows PowerShell,然后单击 Windows PowerShell。在 Windows PowerShell 控制台中,在命令提示符处键入以下命令,然后按 Enter:Get-Host |选择对象版本
您将看到如下所示的输出:
Version-------3.0
您假设已使用默认选项安装了 powershell,并且未从“开始”菜单中删除快捷方式。最好使用注册表测试。
我认为,如果您首先需要使用 PowerShell,则尝试将其作为标准运行它应该安装,然后如果您没有找到尝试搜索它的图标,那么也许您尝试从命令提示符运行它。我不认为你从注册表开始。
接受的答案指出“... $Host.Version 和 (Get-Host).Version 不可靠 - 它们仅反映主机的版本,而不是引擎”。
答7:
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
Microsoft’s recommended forward compatible method for checking if PowerShell is installed and determining the installed version 是查看两个特定的注册表项。我已经在此处复制了详细信息,以防链接断开。
根据链接页面:
根据任何其他注册表项、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>
对于 PowerShell 3.0,似乎有一个新版本,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3。
链接已失效;它说“403禁止”。
答8:
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
我发现检查是否已安装的最简单方法是:
运行命令提示符(开始、运行、cmd,然后确定)
输入 powershell 然后回车。然后你应该得到 PowerShell PS 提示符:
C:\Users\MyUser>powershell
WindowsPowerShellCopyright(C)2009MicrosoftCorporation. All rights reserved.PSC:\Users\MyUser>然后,您可以通过键入 $PSVersionTable.PSVersion 从 PowerShell 提示符检查版本:
PSC:\Users\MyUser> $PSVersionTable.PSVersionMajorMinorBuildRevision-----------------------20-1-1PSC:\Users\MyUser>如果您想返回命令提示符,请输入 exit(如果您还想关闭命令提示符,请再次输入 exit)。
要运行脚本,请参阅 。
与 the accepted answer 一样,这不会为 PowerShell 1.0 返回任何内容。 The registry method 更明确。
如果powershell不在路径中,这个版本会给人一种没有安装的错觉。 Registry 方法提供了完整的信息。存在和版本。
答9:
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
$host.version 完全错误/不可靠。这为您提供了托管可执行文件的版本(powershell.exe、powergui.exe、powershell_ise.exe、powershellplus.exe 等),不是引擎本身的版本。
引擎版本包含在 $psversiontable.psversion 中。对于 PowerShell 1.0,这个变量不存在,所以很明显,如果这个变量不可用,那么假设引擎是 1.0 显然是完全安全的。
答10:
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
利用:
$psVersion = $PSVersionTable.PSVersionIf($psVersion){
#PowerShellVersionMapping
$psVersionMappings = @()
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.1.14393.0';FriendlyName='WindowsPowerShell5.1Preview';ApplicableOS='Windows10AnniversaryUpdate'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.1.14300.1000';FriendlyName='WindowsPowerShell5.1Preview';ApplicableOS='WindowsServer2016TechnicalPreview5'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.10586.494';FriendlyName='WindowsPowerShell5RTM';ApplicableOS='Windows101511+KB31729851607'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.10586.122';FriendlyName='WindowsPowerShell5RTM';ApplicableOS='Windows101511+KB31407431603'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.10586.117';FriendlyName='WindowsPowerShell5RTM1602';ApplicableOS='WindowsServer2012R2,WindowsServer2012,WindowsServer2008R2SP1,Windows8.1, and Windows7SP1'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.10586.63';FriendlyName='WindowsPowerShell5RTM';ApplicableOS='Windows101511+KB31351731602'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.10586.51';FriendlyName='WindowsPowerShell5RTM1512';ApplicableOS='WindowsServer2012R2,WindowsServer2012,WindowsServer2008R2SP1,Windows8.1, and Windows7SP1'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.10514.6';FriendlyName='WindowsPowerShell5ProductionPreview1508';ApplicableOS='WindowsServer2012R2'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.10018.0';FriendlyName='WindowsPowerShell5Preview1502';ApplicableOS='WindowsServer2012R2'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='5.0.9883.0';FriendlyName='WindowsPowerShell5PreviewNovember2014';ApplicableOS='WindowsServer2012R2,WindowsServer2012,Windows8.1'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='4.0';FriendlyName='WindowsPowerShell4RTM';ApplicableOS='WindowsServer2012R2,WindowsServer2012,WindowsServer2008R2SP1,Windows8.1, and Windows7SP1'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='3.0';FriendlyName='WindowsPowerShell3RTM';ApplicableOS='WindowsServer2012,WindowsServer2008R2SP1,Windows8, and Windows7SP1'}
$psVersionMappings +=New-ObjectPSObject-Property @{Name='2.0';FriendlyName='WindowsPowerShell2RTM';ApplicableOS='WindowsServer2008R2SP1 and Windows7'}
foreach ($psVersionMapping in $psVersionMappings){If($psVersion -ge $psVersionMapping.Name){
@{CurrentVersion=$psVersion;FriendlyName=$psVersionMapping.FriendlyName;ApplicableOS=$psVersionMapping.ApplicableOS}Break}}}Else{
@{CurrentVersion='1.0';FriendlyName='WindowsPowerShell1RTM';ApplicableOS='WindowsServer2008,WindowsServer2003,WindowsVista,WindowsXP'}}您可以从 How to determine installed PowerShell version 下载详细的脚本。
一旦哈希表中没有明确存在版本,这就会中断。
答11:
huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。
忘记此页面并不再返回的最简单方法是学习 Get-Variable:
Get-Variable| where {$_.Name -Like '*version*'}|%{$_[0].Value}无需记住每个变量。只需 Get-Variable 就足够了(并且“应该有一些关于版本的信息”)。
与 $PSVersionTable 相同
找PS版?键入 $PSVersion [tab] [enter]。完毕。不需要记住任何东西:)
这只有在非常熟悉所使用的管道技巧时才有用。初学者不可能比记住 $PSVersionTable 更容易记住所有这些语法
伙计们,Get-Variable 单独工作很好(如果你只需要获取版本),管道只是一个笑话:) 我也不记得管道语法。
原文链接:
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
版权声明:本文标题:PowerShell新手指南:一文教会你查版本 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1772589207a3275476.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论