Массив к таблице в powershell - PullRequest
0 голосов
/ 17 апреля 2019

Помогите мне с какой-нибудь проблемой. Я новичок в PS и мне нужны выходные данные в табличном представлении. Похоже на это.

name1  name2 
-----  ----- 
value1 value2

Но у меня есть:

$a=(get-service).name
$b=(get-service).Status
foreach ($name in $a)
{

$data = [pscustomobject]@{name1 = $name}
}
$data

РЕЗУЛЬТАТ

name1        
-----        
XboxNetApiSvc

БЕЗ ПОДУШКИ

$a=(get-service).name
$b=(get-service).Status


$data = [pscustomobject]@{name1 = $a ; name2 = $b }

$data

Результат

name1                                                                               name2                                  
-----                                                                               -----                                  
{2GISUpdateService, AcronisActiveProtectionService, AcrSch2Svc, AdobeARMservice...} {Stopped, Running, Running, Running...}

Все, что мне нужно для этого сценария

$list = ((Get-ADComputer   -SearchBase "OU=PC,DC=cbu,DC=lan" -Filter  {Enabled -eq "True" }  -Properties DNSHostName).DNSHostName) 
$encoding = [System.Text.Encoding]::UTF8
$up = @()
$down = @()
$table= @()
foreach ($pc in $list) 
{
if ((Test-Connection -Count 1  -computer $pc -quiet) -eq $True)
 {
  $up += $pc
  #write-host $pc  "is up"

 }
 else
 {
 $down += $pc
 #Write-Host $pc "down"
 }
 } 

В конце концов мне нужны выходные значения $ up и $ down в 2 столбцах

Ответы [ 3 ]

0 голосов
/ 17 апреля 2019

Возможно, у вас есть собственный командлет, но вы можете запустить что-то похожее на:

(Get-Service) | select Name,Status | Format-Table

UPDATE

После прочтения вашего обновления. В конце вашего скрипта у вас есть два массива $up и $down. Я объявлю это статическим способом сделать пример проще

$up = @('pc1', 'pc2')
$down = @('pc3','pc4', 'pc5')

Поскольку массивы могут иметь разную длину, вам необходимо рассчитать максимальную длину с помощью:

$max = ($up, $down | Measure-Object -Maximum -Property Count).Maximum

А затем создайте объект, который «сливается» над массивами с:

0..$max | Select-Object @{n="Up";e={$up[$_]}}, @{n="Down";e={$down[$_]}}

Вывод:

Up  Down
--  ----
pc1 pc3
pc2 pc4
    pc5
0 голосов
/ 17 апреля 2019

Да, Петр Стапп прав.Вы можете использовать Format-Table

Пример 1:

Get-Process |Время начала сортировки-объекта |Format-Table -View starttime

Пример 2:

(Get-Service) |выберите Имя, Статус |Таблица формата

Пример 3:

Get-Process |FT

0 голосов
/ 17 апреля 2019

Если вы используете Get-Service только в качестве примера, вы можете просто использовать Select:

Get-Service | Select Name, Status

прочее

$MyList | Select Name1, Name2

Более того, если у вас есть сложная команда, и вы хотите извлечь таблицу из PSObject:

Get-Process | Select-Object -Property ProcessName, Id, WS

Подробнее о Select-Object: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-4.0

...