SOLVED

Ordering data in hash of hashes

%3CLINGO-SUB%20id%3D%22%5C%26quot%3Blingo-sub-3149941%5C%26quot%3B%22%20slang%3D%22%5C%26quot%3Bfr-FR%5C%26quot%3B%22%3EOrdering%20data%20in%20hash%20of%20hashes%26lt%3B%5C%2Flingo-sub%26gt%3B%3CLINGO-BODY%20id%3D%22%5C%26quot%3Blingo-body-3149941%5C%26quot%3B%22%20slang%3D%22%5C%26quot%3Bfr-FR%5C%26quot%3B%22%3E%3CP%3EHello%2C%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3EI%20have%20this%20piece%20of%20code%20%3A%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3CPRE%20class%3D%22%5C%26quot%3Blia-code-sample%22%20language-powershell%3D%22%22%3E%3CCODE%3E...%5Cn%23Get%20GPOs%20with%20all%20settings%20disabled%5Cn%20%20%20%20%24GpoList%20%7C%5Cn%20%20%20%20%20%20%20%20Where-Object%20%7B%24_.gpostatus%20-eq%20%5C%22allsettingsdisabled%5C%22%7D%20%7C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20ForEach-Object%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24CandidateGPOs%5B%24_.id%5D%20%3D%20%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%40%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ID%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24_.id%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DisplayName%20%20%20%20%20%20%20%20%20%20%20%3D%20%24_.displayname%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CreationTime%20%20%20%20%20%20%20%20%20%20%3D%20%24_.creationtime%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Modificationtime%20%20%20%20%20%20%3D%20%24_.modificationtime%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Owner%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24_.Owner%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Domain%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24domain%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20All_Settings_Disabled%20%3D%20%24CandidateGPOs%5B%24_.id%5D.All_Settings_Disabled%20%2B%5C%22True%5C%22%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Not_linked%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24CandidateGPOs%5B%24_.id%5D.Not_linked%20%2B%5C%22%5C%22%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Links_disabled%20%20%20%20%20%20%20%20%3D%20%24CandidateGPOs%5B%24_.id%5D.Links_disabled%20%2B%5C%22%5C%22%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20No_settings%20%20%20%20%20%20%20%20%20%20%20%3D%20%24CandidateGPOs%5B%24_.id%5D.No_settings%20%2B%5C%22%5C%22%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%5Cn%7D%5Cn...%20%5Cn%23other%20similar%20loops%20checking%20other%20settings%20(not%20linked%2C%20links%20disabled%2C%20no%20settings).%5Cn%20%20%20%20%5Cn%24candidateGPOs.GetEnumerator()%20%7C%20Sort-Object%20%24_.keys%20%7C%20ForEach-Object%7B%5BPSCustomObject%5D%24_.value%20%7D%20%7C%20Export-Csv%20%5C%22%24ReportPath%5C%5C_candidateGPOs_Listing.csv%5C%22%20-NoTypeInformation%20-Append%20-delimiter%20%5C%22%3B%5C%22%26lt%3B%5C%2Fcode%26gt%3B%26lt%3B%5C%2Fpre%26gt%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3EThe%20result%20is%20not%20in%20the%20same%20order%20in%20the%20CSV.%3CBR%20%2F%3EThe%20command%20give%20this%20order%20%3A%20%24candidateGPOs.GetEnumerator()%20%7C%20Sort-Object%20%24_.keys%20%7C%20ForEach-Object%7B%5BPSCustomObject%5D%24_.value%20%7D%20%3D%26gt%3B%3CBR%20%2F%3EModificationtime%3A%2013.06.2019%2011%3A24%3A02ID%3CBR%20%2F%3E%3A%20b17dfccad9c-a93c0-41a9-8d04-e119a549450fCreationTime%3CBR%20%2F%3E%3A%2024.03.2007%2014%3A27%3A45%3CBR%20%2F%3E%20No_settings%3A%20TrueDomain%3CBR%20%2F%3E%3A%20contoso.comt%3CBR%20%2F%3E%20Not_linked%3A%3CBR%20%2F%3EOwner%3A%20contoso%5C%5CDomain%20Admins%3CBR%20%2F%3E%20All_Settings_Disabled%3A%3CBR%20%2F%3ELinks_disabled%3A%3CBR%20%2F%3EDisplayName%3A%20Default%20Domain%20Controllers%20Policy%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3EIt%20was%20working%20before.%20I%20don't%20understand%20what%20I%20wrongly%20changed...%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3EThank%20you%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3EO%26lt%3B%5C%2FP%26gt%3B%26lt%3B%5C%2Flingo-body%26gt%3B%3CLINGO-LABS%20id%3D%22%5C%26quot%3Blingo-labs-3149941%5C%26quot%3B%22%20slang%3D%22%5C%26quot%3Bfr-FR%5C%26quot%3B%22%3E%3CLINGO-LABEL%3Epowershell%20hash%20order%26lt%3B%5C%2Flingo-label%26gt%3B%26lt%3B%5C%2Flingo-labs%26gt%3B%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3C%2FLINGO-SUB%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3149941%22%20slang%3D%22fr-FR%22%3EOrdering%20data%20in%20hash%20of%20hashes%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3149941%22%20slang%3D%22fr-FR%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI%20have%20this%20piece%20of%20code%20%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3E...%0A%23Get%20GPOs%20with%20all%20settings%20disabled%0A%20%20%20%20%24GpoList%20%7C%0A%20%20%20%20%20%20%20%20Where-Object%20%7B%24_.gpostatus%20-eq%20%22allsettingsdisabled%22%7D%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20ForEach-Object%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24CandidateGPOs%5B%24_.id%5D%20%3D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%40%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ID%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24_.id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DisplayName%20%20%20%20%20%20%20%20%20%20%20%3D%20%24_.displayname%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CreationTime%20%20%20%20%20%20%20%20%20%20%3D%20%24_.creationtime%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Modificationtime%20%20%20%20%20%20%3D%20%24_.modificationtime%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Owner%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24_.Owner%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Domain%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24domain%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20All_Settings_Disabled%20%3D%20%24CandidateGPOs%5B%24_.id%5D.All_Settings_Disabled%20%2B%22True%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Not_linked%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%24CandidateGPOs%5B%24_.id%5D.Not_linked%20%2B%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Links_disabled%20%20%20%20%20%20%20%20%3D%20%24CandidateGPOs%5B%24_.id%5D.Links_disabled%20%2B%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20No_settings%20%20%20%20%20%20%20%20%20%20%20%3D%20%24CandidateGPOs%5B%24_.id%5D.No_settings%20%2B%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%7D%0A...%20%0A%23other%20similar%20loops%20checking%20other%20settings%20(not%20linked%2C%20links%20disabled%2C%20no%20settings).%0A%20%20%20%20%0A%24candidateGPOs.GetEnumerator()%20%7C%20Sort-Object%20%24_.keys%20%7C%20ForEach-Object%7B%5BPSCustomObject%5D%24_.value%20%7D%20%7C%20Export-Csv%20%22%24ReportPath%5C_candidateGPOs_Listing.csv%22%20-NoTypeInformation%20-Append%20-delimiter%20%22%3B%22%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThe%20result%20is%20not%20in%20the%20same%20order%20in%20the%20CSV.%3CBR%20%2F%3EThe%20command%20give%20this%20order%20%3A%20%24candidateGPOs.GetEnumerator()%20%7C%20Sort-Object%20%24_.keys%20%7C%20ForEach-Object%7B%5BPSCustomObject%5D%24_.value%20%7D%20%3D%26gt%3B%3CBR%20%2F%3EModificationtime%3A%2013.06.2019%2011%3A24%3A02ID%3CBR%20%2F%3E%3A%20b17dfccad9c-a93c0-41a9-8d04-e119a549450fCreationTime%3CBR%20%2F%3E%3A%2024.03.2007%2014%3A27%3A45%3CBR%20%2F%3E%20No_settings%3A%20TrueDomain%3CBR%20%2F%3E%3A%20contoso.comt%3CBR%20%2F%3E%20Not_linked%3A%3CBR%20%2F%3EOwner%3A%20contoso%5CDomain%20Admins%3CBR%20%2F%3E%20All_Settings_Disabled%3A%3CBR%20%2F%3ELinks_disabled%3A%3CBR%20%2F%3EDisplayName%3A%20Default%20Domain%20Controllers%20Policy%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EIt%20was%20working%20before.%20I%20don't%20understand%20what%20I%20wrongly%20changed...%3C%2FP%3E%3CP%3EThank%20you%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EO%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-3149941%22%20slang%3D%22fr-FR%22%3E%3CLINGO-LABEL%3Epowershell%20hash%20order%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Occasional Contributor

Hello,

 

I have this piece of code :

 

 

 

...
#Get GPOs with all settings disabled
    $GpoList |
        Where-Object {$_.gpostatus -eq "allsettingsdisabled"} |
            ForEach-Object{
                $CandidateGPOs[$_.id] = 
                    @{
                        ID                    = $_.id
                        DisplayName           = $_.displayname
                        CreationTime          = $_.creationtime
                        Modificationtime      = $_.modificationtime
                        Owner                 = $_.Owner
                        Domain                = $domain
                        All_Settings_Disabled = $CandidateGPOs[$_.id].All_Settings_Disabled +"True"
                        Not_linked            = $CandidateGPOs[$_.id].Not_linked +""
                        Links_disabled        = $CandidateGPOs[$_.id].Links_disabled +""
                        No_settings           = $CandidateGPOs[$_.id].No_settings +""
                     } 
}
... 
#other similar loops checking other settings (not linked, links disabled, no settings).
    
$candidateGPOs.GetEnumerator() | Sort-Object $_.keys | ForEach-Object{[PSCustomObject]$_.value } | Export-Csv "$ReportPath\_candidateGPOs_Listing.csv" -NoTypeInformation -Append -delimiter ";"

 

 

 

 

The result is not in the same order in the CSV.
The command give this order : $candidateGPOs.GetEnumerator() | Sort-Object $_.keys | ForEach-Object{[PSCustomObject]$_.value } =>
Modificationtime : 13.06.2019 11:24:02
ID : b17dfccad9c-a93c0-41a9-8d04-e119a549450f
CreationTime : 24.03.2007 14:27:45
No_settings : True
Domain : contoso.comt
Not_linked :
Owner : contoso\Domain Admins
All_Settings_Disabled :
Links_disabled :
DisplayName : Default Domain Controllers Policy

 

It was working before. I don't understand what I wrongly changed...

Thank you

 

O

3 Replies
best response confirmed by John_Dodo (Occasional Contributor)

@dotpwsh 
Thank you, but my problem is not about sorting the data but about sorting the columns for the output.

They do not come in the same order as the variable definition.

 

Before they were ordered as expected and suddenly it changed.

Actually it works. Thank you