Home Windows PowerShell: POC – Listar miembros de un grupo local

PowerShell: POC – Listar miembros de un grupo local

powershell-getlocalgroupmember

by José Luis Sánchez Borque

Os dejo este pequeño POST con tres ejemplos resueltos donde planteo el «pequeño problema» de visualar con PowerShell los miembros de un grupo LOCAL que se entra por teclado. El POST pretende ser un ejemplo de sintaxis para aprender sobre la marcha.. es decir, viendo ejemplos y teniendo ciertos conceptos de programación.

He realizado tres implementacione de forma escalar a nivel de dificultad y control de errores.

SOLUCIÓN 1

En esta primera versión se entra el nombre del grupo local por teclado mediante Read-Host y se visualizan sus miembros directamente. A destacar el parámetro -ErrorAction SilentlyContinue. Lo he puesto dado que en caso que el nombre del grupo entrado por teclado no exista, el programa visualiza un error en tiempo de ejecución por pantalla y no queda estético.

#####################################################################
# SCRIPT : Visualizar miembros grupo local por pantalla             #
# VERSION: 1.0                                                      #
# Autor  : José Luis Sánchez                                        #
#####################################################################

Clear-Host
$NombreGrupo = Read-Host "Entra el nombre del grupo: "
Get-LocalGroupMember -Name $NombreGrupo -ErrorAction SilentlyContinue
Write-Host 'FIN PROCESO'

SOLUCIÓN 2

En esta segunda versión, comprobamos si el grupo existe jugando con las propiedades de  la colección de objetos devuelto por Get-LocalGroup. Le pasamos un filtro buscando el nombre del grupo entrado. Controlando la longitud de la cadena devuelta podemos detectar si el grupo existe y actuar en consecuencia. No es la única solución, pero desde el punto de vista docente para alumnos si la más clara.
#####################################################################
#                                                                   #
# SCRIPT : Visualizar miembros grupo local por pantalla             #
# VERSION: 2.0                                                      #
# Autor  : José Luis Sánchez                                        #
#                                                                   #
# Mejoras 2.0                                                       #
#  - Comprobamos si el grupo existe o no.                           #
#  - El script visualiza mensaje de error si no existe el grupo     #
#                                                                   #
#####################################################################

Clear-Host
$NombreGrupo = Read-Host "Entra el nombre del grupo "
$resultado = (Get-LocalGroup).Name | Where-Object {$_ -eq $NombreGrupo}
if ($resultado.Length -ne 0) {
    Get-LocalGroupMember -Name $NombreGrupo
} else {
    Write-Output "El grupo NO $NombreGrupo no existe"
}

SOLUCIÓN 3

En esta última solución opto por hacerlo algo más interactivo, es decir, visualizo un menú por pantalla con los grupos, y pido que el usuario entre el número del grupo a visualizar.
#####################################################################
#                                                                   #
# SCRIPT : Visualizar miembros grupo local por pantalla             #
# VERSION: 3.0                                                      #
# Autor  : José Luis Sánchez                                        #
#                                                                   #
# Mejoras 3.0                                                       #
#  - Visualizamos menú con los grupos y se pide por menú            #
#    que el usuario entre el número del grupo a visualizar.         #
#                                                                   #
#####################################################################

[System.Collections.ArrayList]$ListaGrupos = @()

Clear-Host
$Grupos = (Get-LocalGroup).Name
Write-Output "Lista de grupos locales"

ForEach ($Grup in $Grupos) {
    $result = $ListaGrupos.Add($Grup)
    Write-Output " $result $Grup"
}

$Opcion = Read-Host "Elige un grupo: "
$NombreGrupo = $ListaGrupos[$opcion]

if ($NombreGrupo -eq $null) {
    Write-Output "Has elegido mal..."
} else {
    Get-LocalGroupMember -Name $NombreGrupo
}
Como siempre digo, la programación requiere de mucha imaginación y capacidad de abtracción… Hay más y mejores soluciones seguro, te animo a ponerlas como comentarios del POST y las compartimos entre todos.

You may also like

Leave a Comment