简体   繁体   English

在Powershell中将参数传递给命令

[英]Passing parameter to command in powershell

Could you tell my why this works: 你能告诉我为什么这样做的原因:

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

And this is not: 这不是:

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

?

I'm really confused. 我真的很困惑 I tried to change $Machines to: 我试图将$ Machines更改为:

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

The error I'm getting is: 我得到的错误是:

Get-WmiObject : The RPC server is unavailable. Get-WmiObject:RPC服务器不可用。 (Exception from HRESULT: 0x800706BA) At C:\\AppSupport\\ps\\freespace\\freespace.ps1:10 char:1 + Get-WmiObject Win32_LogicalDisk -ComputerName $Machines -Filter "DeviceID='C:'" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException (来自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

I think what you want to do here is 我想你想在这里做的是

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

which will pass them as an array. 这会将它们作为数组传递。

Because you defined all three names as a single string. 因为您将所有三个名称定义为单个字符串。

$Machines = "xxx, yyyy, zzz"

This is the same as calling Get-WmiObject for the computer "xxx, yyyy, zzz" 这与为计算机"xxx, yyyy, zzz"调用Get-WmiObject相同

xxx, yyy, zzz and @(xxx, yyy, zzz) doesn't work because you didn't quote them, so PowerShell tries to use them as an expression and save the results (calling the function/cmdlet/application with name xxx etc.). xxx, yyy, zzz@(xxx, yyy, zzz)不起作用,因为您没有引用它们,因此PowerShell尝试将它们用作表达式并保存结果(调用名称为xxx的函数/ cmdlet /应用程序等等。)。 That's why it returns ex. 这就是为什么它返回ex。

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

You need to split them into an array of three strings. 您需要将它们分成三个字符串的数组。 This should work 这应该工作

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM