Where-Object:无法绑定参数' FilterScript'

时间:2017-06-08 16:58:21

标签: powershell powercli

我有一个问题,有两个问题。我有以下powercli cmd:

$snapLst = Get-VM vmindev |Get-Snapshot |Select VM, Name, Description, `
 @{Name='Created'; Expression={{$_.Created.ToString("yyMMdd")}}, `
 @{Name='SizeMB'; Expression={[int] $_.SizeMB}}
$resultLst=$snapLst| where SizeMB -gt 1000 |Sort-Object SizeMB |`
 Select @{Name='Type'; Expression={'BIG'}},*

在我的DEV环境中运行(桌面上的powercli会话连接到vSphere服务器),一切都很好。在PRODUCTION中运行时(即vSphere服务器上的powercli会话),我收到以下错误:

Where-Object : Cannot bind parameter 'FilterScript'. Cannot convert the "SizeMB" value of type "System.String" to type System.Management.Automation.ScriptBlock".
    At C:\Users\kness\Scripts\sn2.ps1:32 char:27
    + $resultLst=$snapLst| where <<<<  SizeMB -gt 1000 |Sort-Object SizeMB |Select
    @{Name='Type'; Expression={'BIG'}},
        + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand

Q1:什么 - 在环境设置中 - 会使脚本的行为有所不同?我检查了powercli的版本......它们完全一样。

Q2:因为上面的错误,我通过运行这个cmd来查看列表的属性:

$snapLst = Get-VM vmindev |Get-Snapshot |Get-Member |Findstr Size
SizeGB            Property   System.Nullable`1[[System.Decimal, mscorlib, Ve...
SizeMB            Property   System.Decimal SizeMB {get;}

SizeMB是&#34;十进制&#34;类型;为什么错误会抱怨它是&#34;字符串&#34;?

提前谢谢!

1 个答案:

答案 0 :(得分:3)

我通过帮助fr TessellatingHeckler解决了这个问题。

A1。虽然我的PowerCLI包是相同的,但它在两个不同的Powershell安装上运行。在我的桌面上,PSVersion是4.0,在生产服务器上,它是2.0

A2。这与A1有关。在PS 4.0中,cmdlet 正确转换为 Where-Object {...} 。而在PS 2.0中,这是一个语法错误。抱怨 SizeMB System.String 只是一个红色的鲱鱼跟随&#34;其中&#34;语法错误。

通过将其中SizeMB -gt 1000 更改为 Where-Object {$ _。SizeMB -gt 1000} ,脚本现在正在运行。我想,替代方案是升级vSphere服务器上的PS ......但我不想去那里。谢谢你的帮助。