Blog/Linux/Powershell/get_linux_groups.ps1

127 lines
4.5 KiB
PowerShell
Raw Normal View History

2023-12-17 19:42:32 +01:00
#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('(?&ltpropertyname&gt(Name|ID_Group|Member))\s+(?&ltoperator&gt(-like|-eq|-ceq|-clike))\s+"(?&ltvalue&gt.*)"')]
[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 '(?&ltpropertyname&gt(Name|ID_Group|Member))\s+(?&ltoperator&gt(-like|-eq|-ceq|-clike))\s+"(?&ltvalue&gt.*)"' | 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
}
}
}