source

사용자 지정 개체의 각 Note Property를 반복 실행

nicesource 2023. 9. 6. 22:08
반응형

사용자 지정 개체의 각 Note Property를 반복 실행

저는 당신을 보호하기 위해PSObject이런 파워셸에서:

$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

이 PS 개체의 각 노트 속성에 대해 특정 작업을 수행하고 싶은데 어떻게 수행해야 할지 잘 모르겠습니다.예를 들어 (잘못된 방법이라는 것을 알면서도) 이 코드는 다음과 같습니다.

  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}

편집: 각각NoteProperty는 변수 유형입니다.System.String- 필요하다면요

개체를 잘못 만들고 있는 것입니까, 아니면 개체를 통과하는 방법을 이해하지 못하는 것입니까?

Mike가 언급한 대로 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"
}

이를 통해 필요한 것을 얻을 수 있습니다.

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

시도:

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

짧은(심지어 더 빠른) 버전:

$NetworkInfo.psobject.properties.foreach({"$($_.Name) = $($_.Value)"})

출력:

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

아니면 또 하나:

$NetworkInfo.foreach({$_})

다음을 제공합니다.

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

다음과 같은 속성 1개를 선택할 수도 있습니다.

$NetworkInfo.DNS1

다음과 같은 결과를 얻을 수 있습니다.

10.10.10.200

또는 모든 DNS 항목을 선택합니다.

$NetworkInfo.foreach({$_}) | Select-Object  DNS*

결과:

DNS1         DNS2
----         ----
10.10.10.200 10.10.10.201

원하는 경우:

$NetworkInfo.psobject.properties.where({$_.Name -like 'DNS*' }).Value

다음을 제공합니다.

10.10.10.200
10.10.10.201

각 위치에 대한 조합:

$NetworkInfo.psobject.properties.where({$_.Name -like 'DNS*' }).foreach({
"$($_.Name) = $($_.Value)"})

다음을 제공합니다.

DNS1 = 10.10.10.200
DNS2 = 10.10.10.201

2차원 배열로 변환:

$NetworkInfo.psobject.properties.where({$_.Name -like 'DNS*' }).foreach({
,(@([string]$_.Name, [string]$_.Value))})

"{", 출력의 ", "를 잊지 마십시오.

DNS1
10.10.10.200
DNS2
10.10.10.201

2차원적인 것은

$NetworkInfo.psobject.properties.where({$_.Name -like 'DNS*' }).foreach({
,(@([string]$_.Name, [string]$_.Value)) })[0]
DNS1
10.10.10.200

그리고 다음은.

$NetworkInfo.psobject.properties.where({$_.Name -like 'DNS*' }).foreach({
,(@([string]$_.Name, [string]$_.Value)) })[0][0]
DNS1

그리고...

$NetworkInfo.psobject.properties.where({$_.Name -like 'DNS*' }).foreach({
,(@([string]$_.Name, [string]$_.Value)) })[0][1]
10.10.10.200

언급URL : https://stackoverflow.com/questions/27642169/looping-through-each-noteproperty-in-a-custom-object

반응형