我遇到了Powershell问题。我尝试运行我的脚本
Param (
[string]$ComputerName
)
$ComputerName = $ComputerName -replace " ", ","
Get-WmiObject Win32_OperatingSystem -ComputerName $ComputerName | select csname, @{LABEL='LastBootUpTime' ;EXPRESSION= {$_.ConverttoDateTime($_.lastbootuptime)}}
我用:
运行它 .\GetBootTime.ps1 -ComputerName localhost,<another computer>
我收到错误消息:
Get-WmiObject:RPC服务器不可用。 (例外 HRESULT:0x800706BA)。
但是,如果我跑:
Get-WmiObject Win32_OperatingSystem -ComputerName localhost,<another computer> | select csname, @{LABEL='LastBootUpTime' ;EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}
这是脚本中的主线 然后它工作。 有什么建议吗?
答案 0 :(得分:1)
您的问题是您将Computername
定义为字符串[string]
而不是字符串数组[string[]]
。因此,输入localhost,example
不会被解释为两台计算机,而是一台名为“localhost,example”的计算机。如果使用[string[]]
(或不定义它),则,
字符将被解析为字符串数组中的分隔符。由于Get-WmiObject
可以采用数组,因此它将为数组的每个元素运行一次。
您可以使用-split
对空格和逗号进行自己的解析,但最好使用它首先提供格式正确的数组。使用-split
是因为$ComputerName -replace " ", ","
只会使用逗号而不是空格来生成[string]
,而不是分成数组中的多个元素。
Param (
[string[]]$ComputerName
)
# Manual parsing to split space delimited into two elements
# e.g. 'localhost Example' into @(localhost,Example) - Not a good practice
$ComputerName = $ComputerName -split " "
Get-WmiObject Win32_OperatingSystem -ComputerName $ComputerName | select csname, @{LABEL='LastBootUpTime' ;EXPRESSION= {$_.ConverttoDateTime($_.lastbootuptime)}}