2014-12-24 14 views
11

Sto creando un PSObject in PowerShell come questo:Looping attraverso ogni NoteProperty in un oggetto personalizzato

$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 

voglio fare un'azione specifica per ogni NoteProperty in questo PSObject, ma non sono sicuro di come per fare questo. Per esempio (anche se so che è il modo sbagliato di farlo) questo codice:

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

emette solo l'intero oggetto come un array:

@{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: Ogni NoteProperty è di tipo variabile System.String: se pertinente.

Sto creando l'oggetto in modo errato oppure non capisco come passare attraverso l'oggetto? Qualsiasi aiuto apprezzato! :)

risposta

27

È possibile utilizzare Get-Member come detto da Mike; un'alternativa che mantiene l'ordine è di utilizzare la proprietà PSObject che è presente su tutti gli oggetti:

#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" 
} 
10

Questo dovrebbe ottenere quello che ti serve:

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

Prova:

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