PowerShell的Invoke-Expression缺少参数

PowerShell的Invoke-Expression缺少参数

PowerShell's Invoke-Expression missing param

我以为我拥有最新的PowerShell 2 CTP,但是当我尝试执行以下命令时:

invoke-expression a€"computername Server01 a€"command 'get-process PowerShell'

我收到一条错误消息:
找不到与参数名称\\'computername \\'匹配的参数。

所以问题是:我怎么知道我安装了哪个版本的PowerShell?最新的版本是什么?


从昨晚的版本开始(这意味着您可能会在CTP3中拥有它,但如果没有,您将在下一个公共位置获得它):

1
2
3
4
5
6
7
8
9
10
[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管理合作伙伴架构师


问题在于,从CTP 1到CTP2,他们切换了Invoke内容,所有远程处理内容现在都通过Invoke-Command完成,而Invoke-Expression仅用于将字符串转换为脚本;)

P.S .:如果您使用的是v2,则可以运行$PSVersionTable来查看版本列表,包括CLR和内部版本。


$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的版本号,但是如果您确实需要它,我可以找到它。


如果$PSVersionTable变量不存在,则说明您正在运行V1。

如果存在,则版本将以$PSVersionTable.PSVersion的形式提供。

1
2
3
4
5
6
function Get-PSVersion {  
    if (test-path variable:psversiontable)
        {$psversiontable.psversion}
    else
        {[version]"1.0.0.0"}  
}

我猜想这是对配置过程Configure-Wsman.ps1中所做的cmdlet的更改。我现在没有要测试的环境设置,但是我猜测配置出了点问题。我可以验证在XP上该参数不可用(duh)。我假设您在未完成配置的情况下在Vista / 08上会找到相同的内容。


推荐阅读