Paulo
Paulo

Reputation: 361

Powershell Get values listed

I'm trying to get values from a hashtable but i'm having some difficulty with that.

$allMediafiles is a Hashtable.

This is my code:

$AllDoc =  ($allMediaFiles | Group-Object "video_audio" | ? {$_.name -eq 'document'}).Group

$obj2 = [pscustomobject]@{
    'FileTypes' = ($AllDoc.video_audio | Group ).Name; 
    'Format' = ($AllDoc.Format | Group).Values ;
    'O_OpenAccess' = ($AllDoc | Group-Object "SecurityTag" | ? {$_.Name -eq "O_OpenAccess"}).count; 
    'U_UserAccess' = ($AllDoc | Group-Object "SecurityTag" | ? {$_.Name -eq "U_UserAccess"}).count; 
    'S_SubscriberAccess' = ($AllDoc | Group-Object "SecurityTag" | ? {$_.Name -eq "S_SubscriberAccess"}).count;
    'REVIEW_ELDP' = ($AllDoc | Group-Object "SecurityTag" | ? {$_.Name -eq "REVIEW_ELDP"}).count;
}

My result:

FileTypes Format           O_OpenAccess U_UserAccess S_SubscriberAccess REVIEW_ELDP
--------- ------           ------------ ------------ ------------------ -----------
document  {eaf, pfsx, pdf}            0           17                  2           0

I need something like this:

FileTypes Format           O_OpenAccess U_UserAccess S_SubscriberAccess REVIEW_ELDP
--------- ------           ------------ ------------ ------------------ -----------
document  eaf                        0           14                  1           0
          pfsx                       0            3                  0           0
          pdf                        0            0                  1           0

Thanks for any help!!

$Alldoc =

video_audio SecurityTag        Duration Format
----------- -----------        -------- ------
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    S_SubscriberAccess          eaf   
document    U_UserAccess                pfsx  
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                eaf   
document    U_UserAccess                pfsx  
document    U_UserAccess                pfsx  
document    U_UserAccess                pfsx  
document    U_UserAccess                eaf   
document    S_SubscriberAccess          pdf   
document    U_UserAccess                eaf   

Upvotes: 2

Views: 136

Answers (1)

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174730

You only need to call Group-Object once more - to group the records by Format - then loop over the results:

foreach($format in $Alldoc |Group-Object -Property Format)
{
    [pscustomobject]@{
        # Just grab the first one - they're all identical
        'FileTypes' = $format.Group[0].video_audio
        # Grab the format Name from when we grouped them
        'Format' = $format.Name
        # For the remaining ones, simply count the number of occurences
        'O_OpenAccess' = @($format.Group |? {$_.SecurityTag -eq "O_OpenAccess"}).Count
        'U_UserAccess' = @($format.Group |? {$_.SecurityTag -eq "U_UserAccess"}).Count 
        'S_SubscriberAccess' = @($format.Group |? {$_.SecurityTag -eq "S_SubscriberAccess"}).Count
        'REVIEW_ELDP' = @($format.Group |? {$_.SecurityTag -eq "REVIEW_ELDP"}).Count
    }
}

Upvotes: 3

Related Questions