" RPC服务器不可用"仅在运行脚本时

时间:2018-05-29 18:18:31

标签: windows powershell

我遇到了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)}}

这是脚本中的主线 然后它工作。 有什么建议吗?

1 个答案:

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