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
(конечно, этот синтаксис недействителен. Просто чтобы показать точку)
Ответы
Ответ 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