簡體   English   中英

注意PSObject中的屬性未在Foreach循環中填充| NSG詳細信息導出到CSV

[英]NoteProperty in PSObject is not getting populated in Foreach Loop | NSG details export to CSV

我正在創建一個Azure PS腳本,它將獲取所有NSG,然后查找它是否已連接到子網或NIC。

當我運行以下命令時,它給出的輸出沒有“連接到子網”列。 但是,當我使用-ResourceGroupName屬性運行相同的cmdlet時,它會提供具有所需的“附加到子網”和“附加到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-AzureRmNetworkSecurityGroupGet-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  

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM