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

Цитирование через каждый объект NoteProperty в пользовательском объекте

Я создаю PSObject в Powershell следующим образом:

$NetworkInfo = New-Object PSObject
$NetworkInfo | Add-Member -type NoteProperty -Name IPAddress -Value "10.10.8.11"
$NetworkInfo | Add-Member -type NoteProperty -Name SubnetMask -Value "255.255.255.0"
$NetworkInfo | Add-Member -type NoteProperty -Name Gateway -Value "10.10.8.254"
$NetworkInfo | Add-Member -type NoteProperty -Name Network -Value "10.10.8.0"
$NetworkInfo | Add-Member -type NoteProperty -Name DNS1 -Value "10.10.10.200"
$NetworkInfo | Add-Member -type NoteProperty -Name DNS2 -Value "10.10.10.201"

$NetworkInfo

Я хочу сделать конкретное действие для каждого NoteProperty в этом PSObject, но я не уверен, как это сделать. Например (хотя я знаю, что это неправильный способ сделать это) этот код:

  ForEach ($noteProperty in $NetworkInfo) {
    Write-Host $noteProperty
  }

Только выводит весь объект в виде массива:

@{IPAddress=10.10.8.11; SubnetMask=255.255.255.0; Gateway=10.10.8.254; Network=10.10.8.0; DNS1=10.10.10.200; DNS2=10.10.10.201}

EDIT: каждый NoteProperty имеет тип переменной System.String - если это уместно.

Я создаю объект неправильно или просто не понимаю, как пройти через объект? Любая помощь ценится!:)

4b9b3361

Ответ 1

Вы можете использовать Get-Member, как упоминалось Майком; альтернатива, которая сохраняет порядок, заключается в использовании свойства PSObject, которое присутствует на всех объектах:

#View details for all properties on a specific object
$NetworkInfo.PSObject.Properties

#similar code to Mike's, working with name and value:
$NetworkInfo.PSObject.Properties | foreach-object {
    $name = $_.Name 
    $value = $_.value
    "$name = $value"
}

Ответ 2

Это должно получить то, что вам нужно:

$NetworkInfo | get-member -type NoteProperty | foreach-object {
  $name=$_.Name ; 
  $value=$NetworkInfo."$($_.Name)"
  write-host "$name = $value"
}

Ответ 3

Попробуйте:

ForEach ($noteProperty in $NetworkInfo.PSObject.Properties)
{
   Write-Host $noteProperty.Name
   Write-Host $noteProperty.Value
}