Подтвердить что ты не робот

Powershell "присоединяются"

Назовите меня глупым, но я теряю волосы с этим.

У меня есть два результата из Get-WmiObject:

$cpu = Get-WmiObject -Class Win32_Processor 
$mb = Get-WmiObject -Class Win32_BaseBoard

Теперь я могу фильтровать и выводить CSV файл из каждого:

$cpu | Select-Object Name, Description | ConvertTo-Csv -NoTypeInformation

и

$mb | Select-Object Manufacturer, Product | ConvertTo-Csv -NoTypeInformation

Но... Как, черт возьми, я мог объединить эти два выхода и сделать один вывод CSV из обоих? Что-то вроде:

( 
  ($cpu | Select-Object Name, Description) + 
  ($mb | Select-Object Manufacturer, Product) 
) | ConvertTo-Csv -NoTypeInformation

(конечно, этот синтаксис недействителен. Просто чтобы показать точку)

4b9b3361

Ответ 1

Вам потребуется Powershell V2 для следующего.

$cpu = Get-WmiObject -Class Win32_Processor 
$mb = Get-WmiObject -Class Win32_BaseBoard
$props = @{            
    Name          = $cpu.Name
    Description   = $cpu.Description
    Manufacturer  = $mb.Manufacturer
    Product       = $mb.Product
    }
New-Object PSObject -Property $props | ConvertTo-Csv -NoTypeInformation

Ответ 2

Здесь для существует функция Join-Object

Как только вы определили это, вы можете использовать его следующим образом:

Join-Object (Get-WmiObject -Class Win32_Processor) (Get-WmiObject -Class Win32_BaseBoard) | 
Select Name, Description, Manufacturer, Product

Или сохраняйте свои переменные и делайте это так:

$cpu = Get-WmiObject -Class Win32_Processor 
$mb = Get-WmiObject -Class Win32_BaseBoard

Join-Object $cpu $mb  | Select Name, Description, Manufacturer, Product

Ответ 3

Как насчет этого?

echo $cpu $mb | Select-Object Name, Description, Manufacturer, Product | ConvertTo-Csv -NoTypeInformation

Ответ 4

Вы всегда можете добавить любые свойства, которые вам нужны, к настраиваемому объекту powershell, который имеет то, что вам нужно, а затем сбросить cvs. Посмотрите на эту страницу и посмотрите, подходит ли вам то, что вам нужно.

Ответ 5

Вы можете начать с любого объекта, а затем добавить свойства от другого:

$cpu | Select-Object Name, Description | 
  add-member noteproperty Manufacturer $mb.Manufacturer -PassThru | 
  add-member noteproperty Product      $mb.Product      -PassThru

Ответ 6

Это то, что вы ищете? Несколько дольше я ожидал, потому что оба $cpu и $mb имеют свойства Name и Manufacturer. Но основная идея - это настраиваемые объекты с помощью хэширования.

($cpu | Select-Object Name, Description),($mb | Select-Object Manufacturer, Product) | 
       Select-Object @{name='NameOrManu';expr={$_.Name + $_.Manufacturer}},  
                     @{name='DescrOrProd';expr={$_.Description + $_.Product}} | 
       ConvertTo-Csv -NoTypeInformation