2016-06-07 3 views
2

J'essaie d'apprendre PowerShell. J'ai écrit un petit script pour surveiller mes serveurs Exchange. Je ne comprends pas pourquoi ce travail en ligne sur la machine locale sans problèmeWhere-Object fonctionne localement mais pas à distance

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)}} 

mais si je mets le même code dans la commande Invoke-je reçois cette erreur.

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)}} 
    } 

Impossible de lier l'argument au paramètre 'FilterScript' parce qu'il est nul. + CategoryInfo: invalidData: (:) [Where-Object], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationErrorNullNotAllowed, Microsoft.PowerShell.Commands.WhereObject Commande

J'ai essayé tout ce que je peux penser sans chance. Je vérifie même avec gm et l'étiquette existe ... Un conseil ..?

+0

Je recommande vivement les versions les plus récentes de PowerShell si vous le pouvez. BIG si, bien que certaines versions ne sont pas compatibles avec certaines versions d'Exchange. –

Répondre

2

On dirait que le point final auquel vous vous connectez est PowerShell 2.0, qui n'a pas la syntaxe simplifiée Where-object.

Essayez ce where-object à la place:

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

Fonctionne. Merci. Je n'ai pas pensé à la divergence de la version PS. – Micael