#Script créé par Nicolas Lang - Sous licence CC-BY-SA #https://nicolaslang.fr function Get-LinuxGroups { [CmdletBinding( SupportsShouldProcess=$false, HelpUri="http://nicolaslang.blogspot.com" )] param( [Parameter (Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [ValidateNotNullOrEmpty()] [string]$Name, [Parameter (Mandatory=$false)] [ValidateNotNullOrEmpty()] [ValidatePattern('(?<propertyname>(Name|ID_Group|Member))\s+(?<operator>(-like|-eq|-ceq|-clike))\s+"(?<value>.*)"')] [string]$filter ) begin { $groups = Get-Content /etc/group $grouparray = New-Object System.Collections.ArrayList $maxgroup = 0 #Calcul de la valeur maxgroup foreach ($group in $groups) { $splitted = $group.split(":") $count = $splitted[-1].split(",") if ($count.count -gt $maxgroup) { $maxgroup = $count.count } } foreach ($group in $groups) { $splitted = $group.split(":") $count = $splitted[-1].split(",") $object = [PSCustomObject]@{ "Name" = $splitted[0] "ID_Group" = $splitted[2] } $loop = 0 foreach ($member in $count) { $object | Add-Member -Name "Member $($loop + 1)" -MemberType NoteProperty -Value $member $loop++ } while ($loop -lt $maxgroup) { $object | Add-Member -Name "Member $($loop + 1)" -MemberType NoteProperty -Value "" $loop++ } $object | Add-Member -name "TotalList" -MemberType NoteProperty -Value $count $grouparray.Add($object) | Out-Null } #Définition des paramètres affichés par défaut $defaultProperties = ($grouparray | Get-Member | Where-Object {$_.membertype -eq "NoteProperty" -and $_.name -like "Member*"}).Name $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet(‘DefaultDisplayPropertySet’,[string[]]$defaultProperties) $defaultdisplaypropertyset.ReferencedPropertyNames.insert(0,"ID_Group") $defaultdisplaypropertyset.ReferencedPropertyNames.insert(0,"Name") $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $grouparray | Add-Member MemberSet PSStandardMembers $PSStandardMembers } Process { if ($filter) { $filter -match '(?<propertyname>(Name|ID_Group|Member))\s+(?<operator>(-like|-eq|-ceq|-clike))\s+"(?<value>.*)"' | Out-Null if ($matches.propertyname -eq "Member") { Switch ($matches.operator) { "-like" { $return = $grouparray | Where-object {$_.totallist.split(",") -like "$($matches.value)"} } "-clike"{ $return = $grouparray | Where-object {$_.totallist.split(",") -clike "$($matches.value)"} } "-eq" { $return = $grouparray | Where-object {$_.totallist.split(",") -eq "$($matches.value)"} } "-ceq" { $return = $grouparray | Where-object {$_.totallist.split(",") -ceq "$($matches.value)"} } } return $return } else { Switch ($matches.operator) { "-like" {$return = $grouparray | Where-Object {$_.$($matches.propertyname) -like "$($matches.value)"}} "-clike"{$return = $grouparray | Where-Object {$_.$($matches.propertyname) -clike "$($matches.value)"}} "-eq" {$return = $grouparray | Where-Object {$_.$($matches.propertyname) -eq "$($matches.value)"}} "-ceq" {$return = $grouparray | Where-Object {$_.$($matches.propertyname) -ceq "$($matches.value)"}} } return $return } } elseif ($name) { return $($grouparray | Where-Object {$_.name -eq $name}) } else { return $grouparray } } }