PowerShell的Invoke-Expression缺少参数
我以为我拥有最新的PowerShell 2 CTP,但是当我尝试执行以下命令时:
invoke-expression计算机名Server01命令"获取进程PowerShell"
我收到一条错误消息:
找不到与参数名称" computername"匹配的参数。
所以问题是:我怎么知道我安装了哪个版本的PowerShell?最新的版本是什么?
解决方案
回答
$ host.version.tostring()将返回版本号。
v1的RTM为1.0.0.0
不能诚实地告诉我们预览的最新版本是什么,因为我还没有机会玩。
回答
最新的CTP是2008年5月2日发布的CTP2,可以在这里找到。远程处理要求在呼叫计算机和目标计算机上都安装WinRM。 CTP中包含一个用于配置WS-Management的脚本,称为Configure-WSMan.ps1.
此命令应为我们提供已安装的PowerShell的版本号。
获取命令" $ PSHome \ powershell.exe" |格式列表FileVersionInfo
V1.0是6.0.5430.0
CTP2是6.1.6585.1
我手头上没有第一个CTP的版本号,但是如果我们确实需要它,我可以找到它。
回答
我猜想这是在配置过程Configure-Wsman.ps1期间对cmdlet所做的更改。我现在没有要测试的环境设置,但是我猜测配置出了点问题。我可以验证在XP上该参数不可用(duh)。我假设我们无需配置即可在Vista / 08上找到相同的内容。
回答
问题是从CTP 1到CTP2,他们切换了Invoke内容,所有远程处理内容现在都通过Invoke-Command完成,而Invoke-Expression仅用于将字符串转换为脚本;)
附注:如果我们使用的是v2,则可以运行$ PSVersionTable查看包含CLR和Build版本的版本列表。
回答
从昨晚的构建中开始(这意味着我们可能会在CTP3中拥有它,但如果没有,我们将在下一个公共位置获得它):
[4120:0]PS> $psversiontable Name Value ---- ----- CLRVersion 2.0.50727.3521 BuildVersion 6.1.7047.0 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.0
实验!享受!从事!
Jeffrey Snover [MSFT]
Windows管理合作伙伴架构师
回答
如果$ PSVersionTable
变量不存在,则说明我们正在运行V1.
如果存在,该版本将以$ PSVersionTable.PSVersion的形式提供。
function Get-PSVersion { if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"} }