我正在尝试学习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确实存在... 任何提示..?
答案 0 :(得分:2)
您要连接的端点看起来像是PowerShell 2.0,它没有简化的Where-object语法。
尝试使用where-object代替:
Where-Object {$_.Label -ne "System Reserved"}