【问题标题】:Passing parameter to command in powershell在powershell中将参数传递给命令
【发布时间】:2016-03-16 14:03:17
【问题描述】:

你能告诉我为什么会这样吗:

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

【问题讨论】:

    标签: powershell parameter-passing


    【解决方案1】:

    我想你想在这里做的是

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

    这会将它们作为数组传递。

    【讨论】:

    • 非常感谢!
    【解决方案2】:

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

    $Machines = "xxx, yyyy, zzz"
    

    这与为计算机调用Get-WmiObject "xxx, yyyy, zzz" 相同

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

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

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

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

    【讨论】:

    • 非常感谢!那行得通,我明白我做错了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2015-03-03
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多