Результаты в одной строке, нужно по одной в строке - PullRequest
0 голосов
/ 25 июня 2019

Попытка объединить некоторые свойства из get-netadaptor с get-netipaddress

попробовала все, что я знаю, но результаты переменной $ getnet-name все в одной строке

${getnet-name} = New-Object psobject -Property @{
Status = $null
AdminStatus = $null
LinkLayerAddress = $null
}

${getnet-name}.Status = (Get-NetAdapter -Physical).Status
${getnet-name}.AdminStatus = (Get-NetAdapter -Physical).AdminStatus
${getnet-name}.LinkLayerAddress = (Get-NetAdapter -Physical).LinkLayerAddress

Get-NetAdapter | Get-NetIPAddress | ft interfacealias , ipaddress , prefixorigin ${getnet-name}.AdminStatus -AutoSize
PS C:\Users\username> ${getnet-name}

Status                               AdminStatus      LinkLayerAddress                                                            
------                               -----------      ----------------                                                            
{Disconnected, Up, Disconnected, Up} {Up, Up, Up, Up} {14-xF-8A-xC-73-00, 0x-50-B6-xx-F0-EB, 10-x5-30-x1-56-B7, 02-00-xC-4x-4F-50}

Здесь я застрял с циклом

${getnet-name} = New-Object psobject -Property @{
Status = $null
AdminStatus = $null
LinkLayerAddress = $null
}

${getnet-name}.Status = (Get-NetAdapter).Status
${getnet-name}.AdminStatus = (Get-NetAdapter).AdminStatus
${getnet-name}.LinkLayerAddress = (Get-NetAdapter).LinkLayerAddress

${getnet-obj} = Get-NetAdapter -Physical | Select-Object -Property {${getnet-name}.AdminStatus} , {${getnet-name}.Status} , {${getnet-name}.LinkLayerAddress}

$getnetobj = Get-NetAdapter -Physical

foreach ($InterfaceIndex in $getnetobj) 
{
Get-NetIPAddress | ft interfacealias , ipaddress , prefixorigin , {${getnet-name}.AdminStatus} , {${getnet-name}.Status} , {${getnet-name}.LinkLayerAddress} -AutoSize
}

он повторяет один и тот же результат для интерфейса


, надеясь в конечном итоге получить это, чтобы также фильтровать адреса IPv4только с использованием фильтра Get -AddressFamily


В настоящее время работает, но на самом деле это не очень хороший способ сделать это.Альтернативные решения, которые более элегантны, будут полезны, если вы захотите добавить их!

$results = @()

foreach ($adapter in (Get-NetAdapter -Physical))
{
    $ipaddresses = $adapter | Get-NetIPAddress -AddressFamily IPv4

    foreach ($ipaddress in $ipaddresses)
    {
        #build the object for reach record you want
        $netadapteraddress = New-Object psobject -Property @{
        Status = $null
        AdminStatus = $null
        LinkLayerAddress = $null
        InterfaceAlias = $null
        IPAddress = $null
        PrefixOrigin = $null
        }

        #properties for the adapter
        $netadapteraddress.Status = $adapter.Status
        $netadapteraddress.AdminStatus = $adapter.AdminStatus
        $netadapteraddress.LinkLayerAddress = $adapter.LinkLayerAddress

        #properties for the ipaddress
        $netadapteraddress.InterfaceAlias = $ipaddress.InterfaceAlias
        $netadapteraddress.IPAddress = $ipaddress.IPAddress
        $netadapteraddress.PrefixOrigin = $ipaddress.PrefixOrigin

        #add to results
        $results += $netadapteraddress
    }

}

$results | ft -wrap 

Спасибо!

1 Ответ

2 голосов
/ 25 июня 2019

Возможно, есть лучший путь, но я бы так и поступил. Обходите все физические адаптеры, просматривайте каждый ipaddress для этого адаптера, создавайте объект для хранения нужных вам данных, заполняйте данные. добавить объект в массив, вернуть массив.

$results = @()

foreach ($adapter in (Get-NetAdapter -Physical))
{
    $ipaddresses = $adapter | Get-NetIPAddress

    foreach ($ipaddress in $ipaddresses)
    {
        #build the object for reach record you want
        $netadapteraddress = New-Object psobject -Property @{
        Status = $null
        AdminStatus = $null
        LinkLayerAddress = $null
        InterfaceAlias = $null
        IPAddress = $null
        PrefixOrigin = $null
        }

        #properties for the adapter
        $netadapteraddress.Status = $adapter.Status
        $netadapteraddress.AdminStatus = $adapter.AdminStatus
        $netadapteraddress.LinkLayerAddress = $adapter.LinkLayerAddress

        #properties for the ipaddress
        $netadapteraddress.InterfaceAlias = $ipaddress.InterfaceAlias
        $netadapteraddress.IPAddress = $ipaddress.IPAddress
        $netadapteraddress.PrefixOrigin = $ipaddress.PrefixOrigin

        #add to results
        $results += $netadapteraddress
    }

}

$results | format-table -AutoSize
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...