将参数传递给powershell中的命令
你能告诉我为什么这样做吗:将参数传递给powershell中的命令,powershell,parameter-passing,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 / 1
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)
我得到的错误是:
获取WMIOObject:RPC服务器不可用。(来自HRESULT的异常:0x800706BA)
在C:\AppSupport\ps\freespace\freespace.ps1:10 char:1
+获取WmiObject Win32_LogicalDisk-ComputerName$Machines-Filter“DeviceID='C:'”。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:InvalidOperation:(:)[Get WMIOObject],COMException
我想你想在这里做的是
$Machines = @("xxx", "yyy", "zzz")
将它们作为数组传递。我想您在这里要做的是
$Machines = @("xxx", "yyy", "zzz")
将它们作为数组传递。因为您将所有三个名称定义为单个字符串
$Machines = "xxx, yyyy, zzz"
这与为计算机调用“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) }}
因为您将所有三个名称定义为一个字符串
$Machines = "xxx, yyyy, zzz"
这与为计算机调用“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) }}
非常感谢!我明白我做错了什么。非常感谢!我明白我做错了什么。非常感谢你!非常感谢你!