【发布时间】:2012-07-31 01:53:13
【问题描述】:
我们正在向仅在 Powershell 2.0 中工作的客户端提供脚本。
通过命令我们可以确保powershell 2.0安装如下
$version = Get-host | Select-object Version
但是如果我们提供脚本,如何确保它们是从 Powershell 2.0 执行的呢?
在执行脚本时,Powershell 2.0 的特性在启动脚本本身时可能会出现脚本错误。不是吗?
【问题讨论】:
我们正在向仅在 Powershell 2.0 中工作的客户端提供脚本。
通过命令我们可以确保powershell 2.0安装如下
$version = Get-host | Select-object Version
但是如果我们提供脚本,如何确保它们是从 Powershell 2.0 执行的呢?
在执行脚本时,Powershell 2.0 的特性在启动脚本本身时可能会出现脚本错误。不是吗?
【问题讨论】:
您可以使用 #requires 注释您的脚本,并声明它不应在低于 PowerShell v2 的任何设备上运行:
#requires -Version 2.0
(旁注:即使您模糊地知道它存在,也很难找到它。)
【讨论】:
依赖主机版本并不是最安全的做法,因为脚本可以在主机版本与 PowerShell 版本不同的主机上运行。
$PSVersionTable 变量是在 v2 中添加的。您可以检查变量是否存在,如果存在则您正在运行 v2 及更高版本,您还可以检查 PSVersion.Major 属性:
if($PSVersionTable)
{
'PowerShell {0}' -f $PSVersionTable.PSVersion.Major
}
else
{
'PowerShell 1'
}
【讨论】:
我会这样做:
# get version
$ver = $PsVersionTable.psversion.major
# Check to see if it's V2
If ($ver -NE 2)
{"incorrect version - exiting; return}
# Everything that follows is V2
希望这会有所帮助!
【讨论】:
尝试使用$PSVersionTable
你会得到类似的东西:
Name Value
---- -----
CLRVersion 2.0.50727.5456
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
【讨论】:
$PSVersionTable 在 v1 中不存在。这是一个很好的指标,但仅针对 PSVersion 属性的幼稚检查不会单独进行。