Invoke-Command возвращает данные

Я работаю над сценарием для запроса информации о конфигурации на удаленных серверах и возврата данных для вывода в gridview. Проблема, с которой я сталкиваюсь, - это формат, в котором возвращаются данные.

If I do...

((Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors | Measure-Object).Count
((Get-CimInstance -ClassName Win32_PhysicalMemory).Capacity | Measure-Object -Sum).Sum /1GB

в ps1 и запускаю его на удаленном сервере с помощью Invoke-Command, я получаю массив обратно только с такими числами.

2
4

Как я могу эффективно собирать эту информацию с контекстом с нескольких машин? Я пробовал удаленные задания, но я не могу запускать больше двух заданий одновременно. Я хотел бы распространить работу на все целевые серверы таким образом.


person Acerbity    schedule 14.05.2014    source источник


Ответы (1)


Эти значения на самом деле имеют имя компьютера, например:

30# $r = Invoke-Command ...
31# $r[0]
4
32# $r[0].PSComputerName
hillr2

PowerShell просто не отображает эту информацию по умолчанию для числа. Вы можете сделать это:

32# icm hillr2 -ScriptBlock {
>>> $NumLogCpu = (Get-CimInstance Win32_Processor).NumberOfLogicalProcessors
>>> $MemSize = ((Get-CimInstance Win32_PhysicalMemory).Capacity | Measure-Object -Sum).Sum /1GB
>>> [pscustomobject]@{NumLogCpu=$NumLogCpu;MemSize=$MemSize}
>>> }


NumLogCpu      : 4
MemSize        : 8.00390625
PSComputerName : hillr2
RunspaceId     : fb03fedd-2771-46cf-916a-f31ec7c8298b

Для этого требуется PowerShell версии 3 или выше для ускорителя типа [pscustomobject].

person Keith Hill    schedule 14.05.2014
comment
Хорошо, хорошо, я не подумал об этом. Я попробовал маршрут psobject, но у меня возникла проблема с получением информации (psobject) из сценария. Поэтому я запускаю скрипт, используя $x = Invoke-Command .\script.ps1, и я могу восстановить данные из запросов, используя $x (массив 2 и 4), но я не могу вернуть сам psobject. Мне нужно его вернуть? - person Acerbity; 15.05.2014
comment
Я хотел бы вернуть [pscustomobject]@{ComputerName=$CompNm;NumLogCpu=$NumLogCpu;MemSize=$MemSize} обратно в виде объекта, чтобы я мог сложить их для просмотра сетки. - person Acerbity; 15.05.2014
comment
Неважно, я только что понял. Мне нужно было присвоить переменную pscustomobject и повторить ее в конце скрипта, чтобы вернуть ее как $x. - person Acerbity; 15.05.2014