«Сервер RPC недоступен» только при запуске скрипта - PullRequest
0 голосов
/ 29 мая 2018

У меня проблема с 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 голосов
/ 29 мая 2018

Ваша проблема в том, что вы определяете 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)}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...