NoteProperty в PSObject не заполняется в цикле Foreach |NSG детали экспорта в CSV - PullRequest
0 голосов
/ 21 июня 2019

Я создаю сценарий Azure PS, который получит весь NSG, а затем определит, подключен ли он к подсети или сетевой карте

Когда я запускаю приведенную ниже команду, она выдает результат без столбца «Прикреплено к подсети». Но когда я запускаю тот же командлет со свойством -ResourceGroupName, он выдает результат с «Прикреплено к подсети» и «Прикреплено к Nic» NoteProperty что желательно.

Я не могу отладить, почему не добавляется столбец «Присоединен к подсети» с Get-AzureRmNetworkSecurityGroup

$NSGdetails = @()

Get-AzureRmNetworkSecurityGroup | ForEach-Object {

    $D2 = New-Object PSObject

    Write-Host $_.Name 

    $subnet = $_.Subnets.Id
    $nic = $_.NetworkInterfaces.id

    $D2 | Add-Member -MemberType NoteProperty -Name "NSG Name" -Value $_.Name -Force

    if ($subnet -ne $null) { 
        $subnetdetail = $subnet.Split('/')[-1]
        $D2 | Add-Member -MemberType NoteProperty -Name "Attached To Subnet" -Value $subnetdetail -Force
    }

    if ($nic -ne $null) {
        $nicdetail = $nic.Split('/')[-1]
        $D2 | Add-Member -MemberType NoteProperty -Name "Attached To NIC" -Value $nicdetail -Force
    }

    $NSGdetails += $D2
}

$NSGdetails | Export-Csv -Path "C:\temp\allnicdetails.csv"  -NoTypeInformation -Force 

Ниже вывод с Get-AzureRmNetworkSecurityGroup -ResourceGroupName RAH-AQ

PS C:\Users\021176\Desktop> $NSGdetails

NSG Name    Attached To Subnet Attached To NIC
--------    ------------------ ---------------
linuxvm-nsg default            linuxvm15      
redhat-nsg                     redhat396      

Выход с Get-AzureRmNetworkSecurityGroup указан ниже

PS C:\Users\021176\Desktop> $NSGdetails

NSG Name       Attached To NIC
--------       ---------------
demolinux-nsg  demolinux76    
devnsg         devnic         
mastesta1-nsg  mastesta1275   
TutorialVM1    TutorialVM1    
filenetapp-nsg filenetapp828  
testvm1NSG                    
nehatest-nsg   nehatest995    
RHEL-nsg       rhel858        
linuxvm-nsg    linuxvm15      
linuxvm-nsg    linuxvm15      
redhat-nsg     redhat396      
SQLBackup-nsg  sqlbackup454   
opnvpntest-nsg opnvpntest764  

1 Ответ

1 голос
/ 21 июня 2019

Свойство Attached To Subnet не заканчивается в CSV, потому что только некоторые ваших объектов имеют это свойство, а Export-Csv решает, какие свойства разрешить и записать, основываясь на в первую очередь входной объект.Измените свой код на всегда добавьте свойство, независимо от того, есть ли для него значение:

if ($subnet -ne $null) { 
    $subnetdetail = $subnet.Split('/')[-1]
} else {
    $subnetdetail = $null
}
$D2 | Add-Member -MemberType NoteProperty -Name "Attached To Subnet" -Value $subnetdetail -Force

if ($nic -ne $null) {
    $nicdetail = $nic.Split('/')[-1]
} else {
    $nicdetail = $null
}
$D2 | Add-Member -MemberType NoteProperty -Name "Attached To NIC" -Value $nicdetail -Force
...