Public/Get-UserGroupMember.ps1
|
function Get-UserGroupMember { <# .SYNOPSIS Gets the members of a local group. .DESCRIPTION The Get-UserGroupMember cmdlet gets the members of a local group. .PARAMETER Group The security group from the local Security Accounts Manager. .PARAMETER Name The security group from the local Security Accounts Manager. .PARAMETER SID The security group from the local Security Accounts Manager by SecurityIdentifier. .PARAMETER Member The name of the user or group that is a member of this group. .EXAMPLE Get-UserGroupMember -Name "Administrators" Gets all members of the Administrators group. #> [CmdletBinding(DefaultParameterSetName = 'Default')] param( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, ParameterSetName = 'Group')] [UserGroup]$Group, [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, ParameterSetName = 'Default')] [string]$Name, [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, ParameterSetName = 'SecurityIdentifier')] [System.Security.Principal.SecurityIdentifier]$SID, [Parameter(Position = 1)] [ValidateNotNullOrEmpty()] [string]$Member ) process { $group = $null if ($null -ne $Group) { $group = $Group } elseif ($null -ne $Name) { $group = [UserGroup]::new($Name) } elseif ($null -ne $SID) { $group = [UserGroup]::new() $group.SID = $SID } if ($null -eq $group) { return } try { $members = [LocalAccountHelper]::GetUserGroupMembers($group) # Filter by Member if specified if ($null -ne $Member) { if ($Member -match '\*|\?') { $pattern = [System.Management.Automation.WildcardPattern]::new($Member, [System.Management.Automation.WildcardOptions]::Compiled -bor [System.Management.Automation.WildcardOptions]::IgnoreCase) $members = $members | Where-Object { $pattern.IsMatch($_.Name) } } else { $sid = [LocalAccountHelper]::TryParseSid($Member) if ($null -ne $sid) { $members = $members | Where-Object { $_.SID -eq $sid } } else { $members = $members | Where-Object { $_.Name -and $_.Name.EndsWith($Member, [StringComparison]::CurrentCultureIgnoreCase) } } } } # Sort by name $members = $members | Sort-Object { $_.Name } $members } catch { Write-Error -Message $_.Exception.Message -ErrorId 'InvalidUserGroupMemberOperation' -Category InvalidOperation -TargetObject $group } } } |