Quantcast
Channel: PowerShell.com – PowerShell Scripts, Tips, Forums, and Resources
Viewing all articles
Browse latest Browse all 6937

Exporting HashTable/OrderedDictionary to CSV : (Key: Row1; Value: Row2)

$
0
0

Exporting HashTable/OrderedDictionary to CSV : (Key: Row1; Value: Row2)

Desired Output:

| col1  col2    col3 col4   ......

 +--------------------------------------------  

1|LDClass  LDName  LDNoSDClass ......

2|{LD}  {LD1}   {5}{5}......

=============================

Name                           Value

----                           -----

LDClass                        {LD}

LDName                         {LD1}

LDNo{5}

SDClass                   {5}

 

I've collected a set of properties to a Variable ($hash), after parsing an XML file.

==================================

$hash | gm 

TypeName: System.Collections.Specialized.OrderedDictionary

 

$hash.GetType()

IsPublic IsSerial Name                                     BaseType                                                               -------- -------- ----                                     --------                                                                       True     True     OrderedDictionary                        System.Object                                                  

==================================                                    

 

Here goes my Code:

==================================================================

# Import XML file and cast it to a Variable

$XML = [xml] (Get-Content Test.xml)

 

$LDArray = $xml.selectnodes("//device") | Where {$_.class -eq "logicalDrive"}

$SDCntrlArray = $xml.selectnodes("//device") | Where {$_.class -eq "storageController"}

$HDArrays = $xml.selectnodes("//device") | where {$_.class -eq "HardDrive"}

 

# ==============================================================================================================================================

 

    $SvrInfoArray = @()

 

       # Fetch Server Information

    $SvrInfo= New-Object -TypeName PSObject

    $SvrInfo | Add-Member -MemberType NoteProperty -Name SrvSerialNo  -value ($xml.diagOutput.category[-1].structure.Property | where {$_.name -eq "serialNumber"} | select value | sort -Unique | select -ExpandProperty Value)

    $SvrInfo | Add-Member -MemberType NoteProperty -Name SrvModel -value ($xml.diagOutput.category[-1].structure.Property | where {$_.name -eq "productName"} | select -ExpandProperty Value)

    $SvrInfo | Add-Member -MemberType NoteProperty -Name RptTimeStamp -value ($xml.ChildNodes | where {$_.Type -eq "idResult"} | Select -ExpandProperty timeStampCaption)

    $SvrInfo | Add-Member -MemberType NoteProperty -Name InsgtDiagVer -value ($xml.ChildNodes | where {$_.Type -eq "idResult"} | Select -ExpandProperty buildVersion)

 

        $SvrInfoArray += $SvrInfo

 

        # Define a hash table to hold properties of all Logical Drives

 

                $SrvHash = [ordered]@{

                SrvSerialNo=@($SvrInfoArray."SrvSerialNo")

                SrvModel=@($SvrInfoArray."SrvModel")

                RptTimeStamp = @($SvrInfoArray."RptTimeStamp")

                InsgtDiagVer = @($SvrInfoArray."InsgtDiagVer")

                }

 

                    #$SrvHash

                $Hash += $SrvHash

# ==============================================================================================================================================

 

        $LDInfoArray = @()

        If ($LDArray.count -gt 0)

        {$i = 0

            While ($i -lt $LDArray.count)

            {

        # Fetch Properties of each Logical Drive

 

        $LDInfo1 = New-Object -TypeName PSObject

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDClass -value $LDArray[$i].class

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDName -value $LDArray[$i].Name

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDCaption -value $LDArray[$i].Caption

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDDescription -value $LDArray[$i].Description

 

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDNoOfHDonCntrlr -value ($LDArray[$i].Property | Where {$_.Name -like "numberOfHardDrivesOnControlle*"} | Select -ExpandProperty Value)

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDNoOfHDinLD -value ($LDArray[$i].Property | Where {$_.Name -like "numberOfHardDrivesInLogicalDriv*"} | Select -ExpandProperty Value)

 

        $LDInfoArray += $LDInfo1 

        $i= $i+1

            }

        }

 

        Else {

        $LDInfo1 = New-Object -TypeName PSObject

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDClass -value $LDArray.class

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDName -value $LDArray.Name

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDCaption -value $LDArray.Caption

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDDescription -value $LDArray.Description

 

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDNoOfHDonCntrlr -value ($LDArray.Property | Where {$_.Name -like "numberOfHardDrivesOnControlle*"} | Select -ExpandProperty Value)

        $LDInfo1 | Add-Member -MemberType NoteProperty -Name LDNoOfHDinLD -value ($LDArray.Property | Where {$_.Name -like "numberOfHardDrivesInLogicalDriv*"} | Select -ExpandProperty Value)

 

        $LDInfoArray += $LDInfo1

                }

 

        # Define a hash table to hold properties of all Logical Drives

 

                $LDHash = [ordered]@{

                LDClass=@($LDInfoArray."LDClass")

                LDName=@($LDInfoArray."LDName")

                LDCaption = @($LDInfoArray."LDCaption")

                LDDescription = @($LDInfoArray."LDDescription")

                LDNoOfHDonCntrlr = @($LDInfoArray."LDNoOfHDonCntrlr")

                LDNoOfHDinLD = @($LDInfoArray."LDNoOfHDinLD") 

                }

 

                # $LDHash

                $Hash += $LDHash

 

# ==============================================================================================================================================

 

        $SDInfoArray = @()

        If ($SDCntrlArray.count -gt 0)

        {$i = 0

            While ($i -lt $SDCntrlArray.count)

            {

        # Fetch Properties of each Storage Controller

        $SDInfo1 = New-Object -TypeName PSObject

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDClass -value $SDCntrlArray[$i].class

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDName -value $SDCntrlArray[$i].Name

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDCaption -value $SDCntrlArray[$i].Caption

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDDescription -value $SDCntrlArray[$i].Description

 

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDNoOfCntdDrv -value ($SDCntrlArray[$i].Property | Where {$_.Name -like "numberOfConnectedDrive*"} | Select -ExpandProperty Value)

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDNoOfUnasgnDrv -value ($SDCntrlArray[$i].Property | Where {$_.Name -like "numberOfUnassignedDrive*"} | Select -ExpandProperty Value)

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDNoOfLoglDrv -value ($SDCntrlArray[$i].Property | Where {$_.Name -like "numberOfLogicalDrive*"} | Select -ExpandProperty Value)

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDSerialNo -value ($SDCntrlArray[$i].Property | Where {$_.Name -eq "serialNumber"} | Select -ExpandProperty Value)

 

        $SDInfoArray += $SDInfo1

        $i= $i+1

            }   

        }

 

        Else {

        $SDInfo1 = New-Object -TypeName PSObject

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDClass -value $SDCntrlArray.class

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDName -value $SDCntrlArray.Name

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDCaption -value $SDCntrlArray.Caption

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDDescription -value $SDCntrlArray.Description

 

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDNoOfCntdDrv -value ($SDCntrlArray.Property | Where {$_.Name -like "numberOfConnectedDrive"} | Select -ExpandProperty Value)

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDNoOfUnasgnDrv -value ($SDCntrlArray.Property | Where {$_.Name -like "numberOfUnassignedDrive*"} | Select -ExpandProperty Value)

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDNoOfLoglDrv -value ($SDCntrlArray.Property | Where {$_.Name -like "numberOfLogicalDrive*"} | Select -ExpandProperty Value)

        $SDInfo1 | Add-Member -MemberType NoteProperty -Name SDSerialNo -value ($SDCntrlArray.Property | Where {$_.Name -eq "serialNumber"} | Select -ExpandProperty Value)

 

        $SDInfoArray += $SDInfo1

                }

 

            # Define a hash table to hold properties of all Storage Controller

                $SDHash = [ordered]@{

                SDClass=@($SDInfoArray."SDClass")

                SDName=@($SDInfoArray."SDName")

                SDCaption = @($SDInfoArray."SDCaption")

                SDDescription = @($SDInfoArray."SDDescription")

                SDNoOfCntdDrv = @($SDInfoArray."SDNoOfCntdDrv")

                SDNoOfUnasgnDrv = @($SDInfoArray."SDNoOfUnasgnDrv") 

                SDNoOfLoglDrv = @($SDInfoArray."SDNoOfLoglDrv")

                SDSerialNo = @($SDInfoArray."SDSerialNo")

                }

 

                # $SDHash

                $Hash += $SDHash

 

# ==============================================================================================================================================

 

        $HDInfoArray = @()

        If ($HDArrays.count -gt 0)

        {$i = 0

            While ($i -lt $HDArrays.count)

            {

        # Fetch Properties of each Hard Disk

 

        $HDInfo1 = New-Object -TypeName PSObject

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDClass -value $HDArrays[$i].class

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDName -value $HDArrays[$i].Name

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDCaption -value $HDArrays[$i].Caption

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDDescription -value $HDArrays[$i].Description

 

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDPosition -value (($HDArrays[$i].structure | Where {$_.Name -eq "drivePosition"} | Select -ExpandProperty Property | Select -ExpandProperty value) -join '-')

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDSerialNo -value ($HDArrays[$i].Property | Where {$_.Name -eq "serialNumber"} | Select -ExpandProperty Value)

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDStorCntrlrParent -value ($HDArrays[$i].Property | Where {$_.Name -like "storageControllerParent*"} | Select -ExpandProperty Value)

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDLogicalDrvParent -value ($HDArrays[$i].Property | Where {$_.Name -like "logicalDriveParent*"} | Select -ExpandProperty Value)

 

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDStatus -value ($HDArrays[$i].structure | Where {$_.Name -eq "monitorAndPerformance"} | Select -ExpandProperty Property | Where {$_.name -eq "drivePresentAndOperational"} | Select -ExpandProperty Value)

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDPredFailure -value ($HDArrays[$i].structure | Where {$_.Name -eq "monitorAndPerformance"} | Select -ExpandProperty Property | Where {$_.name -eq "predictiveFailureErrors"} | Select -ExpandProperty Value)

 

        $HDInfoArray += $HDInfo1

        $i= $i+1

            }

 

        }

        Else {

        $HDInfo1 = New-Object -TypeName PSObject

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDClass -value $HDArrays.class

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDName -value $HDArrays.Name

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDCaption -value $HDArrays.Caption

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDDescription -value $HDArrays.Description

 

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDPosition -value (($HDArrays.structure | Where {$_.Name -eq "drivePosition"} | Select -ExpandProperty Property | Select -ExpandProperty value) -join '-')

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDSerialNo -value ($HDArrays.Property | Where {$_.Name -eq "serialNumber"} | Select -ExpandProperty Value)

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDStorCntrlrParent -value ($HDArrays.Property | Where {$_.Name -like "storageControllerParent*"} | Select -ExpandProperty Value)

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDLogicalDrvParent -value ($HDArrays.Property | Where {$_.Name -like "logicalDriveParent*"} | Select -ExpandProperty Value)

 

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDStatus -value ($HDArrays.structure | Where {$_.Name -eq "monitorAndPerformance"} | Select -ExpandProperty Property | Where {$_.name -eq "drivePresentAndOperational"} | Select -ExpandProperty Value)

        $HDInfo1 | Add-Member -MemberType NoteProperty -Name HDPredFailure -value ($HDArrays.structure | Where {$_.Name -eq "monitorAndPerformance"} | Select -ExpandProperty Property | Where {$_.name -eq "predictiveFailureErrors"} | Select -ExpandProperty Value)

 

        $HDInfoArray += $HDInfo1

        }

 

        # Define a hash table to hold properties of all Storage Controller

 

                $HDHash = [ordered]@{

                HDClass=@($HDInfoArray."HDClass")

                HDName=@($HDInfoArray."HDName")

                HDCaption = @($HDInfoArray."HDCaption")

                HDDescription = @($HDInfoArray."HDDescription")

                HDPosition = @($HDInfoArray."HDPosition")

                HDSerialNo = @($HDInfoArray."HDSerialNo") 

                HDStorCntrlrParent = @($HDInfoArray."HDStorCntrlrParent")

                HDLogicalDrvParent = @($HDInfoArray."HDLogicalDrvParent")

                HDStatus = @($HDInfoArray."HDStatus")

                HDPredFailure = @($HDInfoArray."HDPredFailure")

                }

 

                # $HDHash

                $Hash += $HDHash

=================================

Viewing all articles
Browse latest Browse all 6937

Trending Articles