Where-Object在本地但不是远程工作

时间:2016-06-07 02:56:23

标签: powershell powershell-remoting

我正在尝试学习PowerShell。 我写了一个小脚本来监控我的Exchange服务器。 我无法理解为什么这行在没有问题的本地机器上工作

Get-WmiObject -Class win32_volume -Filter 'drivetype = 3' | Where-Object 'Label' -ne "System Reserved" | ft SystemName, DriveLetter, Label, @{LABEL='FreeSpaceGB'; EXPRESSION={"{0:N0}" -f ($_.freespace/1GB)}}

但如果我将相同的代码放入invoke-command,我会收到此错误。

Invoke-Command -ComputerName $server -credential $c -ScriptBlock {
    Get-WmiObject -Class win32_volume -Filter 'drivetype = 3' | Where-Object 'Label' -ne "System Reserved" | ft SystemName, DriveLetter, Label, @{LABEL='FreeSpaceGB'; EXPRESSION={"{0:N0}" -f ($_.freespace/1GB)}}
    }
  

无法将参数绑定到参数“FilterScript”,因为它为null。       + CategoryInfo:InvalidData:(:) [Where-Object],ParameterBindingValidationException       + FullyQualifiedErrorId:ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.WhereObject   命令

我没有运气就尝试了所有我能想到的东西。 我甚至用gm检查并且Label确实存在... 任何提示..?

1 个答案:

答案 0 :(得分:2)

您要连接的端点看起来像是PowerShell 2.0,它没有简化的Where-object语法。

尝试使用where-object代替:

Where-Object {$_.Label -ne "System Reserved"}