2016-07-04 5 views
2

Я пытаюсь получить другой пользовательский объект для количества портов (в сетевом адаптере), которые находятся на сервере.Получить более одного настраиваемого объекта

Приведенный ниже сценарий захватывает только последний порт, обработанный. Как создать пользовательский объект для любого количества портов на сервере? Некоторые могут иметь 2 и другие 4 и т.д. В идеале затем сохранить каждый объект с именем можно затем использовать позже:

$objects = Get-WmiObject -Class Win32_NetworkAdapter -filter "Name LIKE '%Intel%' OR Name LIKE '%HP%' OR Name LIKE '%Broadcom%'" 

Foreach($object in $objects){ 
    $object = New-Object –TypeNamePSObject 
    $object | Add-Member –MemberTypeNoteProperty –Name NetEnabled –Value $os.NetEnabled 
    $object | Add-Member –MemberTypeNoteProperty –Name PNPDeviceID –Value $os.PNPDeviceID 
    Write-Output $object 
} 

ответ

3

Вы перезаписывать текущий object в пределах вашего foreach цикла и использовать переменную $os, которая не определена.

Вы, вероятно, хотите сделать что-то вроде этого:

Foreach($os in $objects) 
{ 
    $object = New-Object –TypeNamePSObject 
    $object | Add-Member –MemberTypeNoteProperty –Name NetEnabled –Value $os.NetEnabled 
    $object | Add-Member –MemberTypeNoteProperty –Name PNPDeviceID –Value $os.PNPDeviceID 
    Write-Output $object 
} 

Однако, так как вы выбрать только два свойства, вы могли бы сделать это вместо:

Get-WmiObject -Class Win32_NetworkAdapter -filter "Name LIKE '%Intel%' OR Name LIKE '%HP%' OR Name LIKE '%Broadcom%'" | 
    select NetEnabled, PNPDeviceID 
2

Ваш код в настоящее время эквивалентно

Get-WmiObject Win32_NetworkAdapter | 
    where Name -match 'Intel|HP|Broadcom' | 
    foreach { 
    $os | select NetEnabled,PNPDeviceID 
    } 

(предполагая, что в нужном месте есть несколько мест, чтобы они запускались вообще).

Это по существу не имеет никакого смысла. Может быть, вы имеете в виду нечто более похожее на следующее?

Get-WmiObject Win32_NetworkAdapter | 
    where Name -match 'Intel|HP|Broadcom' | 
    select NetEnabled,PNPDeviceID 

Обратите внимание, что из-за вашего повторного назначения на $object в цикле и использования $os вы ничего не из запрошенных объектов использовать на всех.

Смежные вопросы