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

Where-Object works locally but not remotely

我正在尝试学习 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 -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)}}
    }

Cannot bind argument to parameter 'FilterScript' because it is null. + CategoryInfo : InvalidData: (:) [Where-Object], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.WhereObject Command

我尝试了所有我能想到的方法,但不幸的是。 我什至与通用汽车核实过,标签确实存在…… 有什么建议吗?

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

试试这个 where-object:

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