在powershell中将参数传递给命令

时间:2016-03-16 14:03:18

标签: powershell parameter-passing

你能告诉我为什么这样有效:

Get-WmiObject Win32_LogicalDisk -ComputerName xxx, yyy, zzz -Filter "DeviceID='C:'" | Select-Object pscomputername, @{Name="Size GB";Expression={ "{0:N2}" -f ($_.Size / 1GB)}}, @{Name="Free GB";Expression={ "{0:N2}" -f ($_.FreeSpace / 1GB) }}

这不是:

$Machines = "xxx, yyyy, zzz"
Get-WmiObject Win32_LogicalDisk -ComputerName $Machines -Filter "DeviceID='C:'" | Select-Object pscomputername, @{Name="Size GB";Expression={ "{0:N2}" -f ($_.Size / 1GB)}}, @{Name="Free GB";Expression={ "{0:N2}" -f ($_.FreeSpace / 1GB) }}

我真的很困惑。 我试图将$ Machines更改为:

xxx, yyy, zzz
@(xxx, yyy, zzz)

我得到的错误是:

  

Get-WmiObject:RPC服务器不可用。 (HRESULT异常:0x800706BA)   在C:\ AppSupport \ ps \ freespace \ freespace.ps1:10 char:1   + Get-WmiObject Win32_LogicalDisk -ComputerName $ Machines -Filter“DeviceID ='C:'”......   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(:) [Get-WmiObject],COMException

2 个答案:

答案 0 :(得分:2)

我认为你想要做的是

$Machines = @("xxx", "yyy", "zzz")

将它们作为数组传递。

答案 1 :(得分:1)

因为您将所有三个名称都定义为单个字符串。

$Machines = "xxx, yyyy, zzz"

这与为计算机Get-WmiObject

调用"xxx, yyyy, zzz"相同

xxx, yyy, zzz@(xxx, yyy, zzz)不起作用,因为您没有引用它们,因此PowerShell尝试将它们用作表达式并保存结果(使用名称{调用函数/ cmdlet / application) {1}}等。这就是它返回前的原因。

xxx

您需要将它们拆分为三个字符串的数组。这应该工作

$machines = xxx, yyy, zzz
At line:1 char:16
+ $machines = xxx, yyy, zzz
+                ~
Missing argument in parameter list.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingArgument