Uso do PowerShell para listar usuários locais em sistemas Windows

O PowerShell é uma ferramenta potente no arsenal dos profissionais de TI, muitas vezes aproveitada por sua capacidade de automatizar tarefas e extrair dados sem problemas. Uma tarefa crítica frequentemente encontrada pelos provedores de serviços gerenciados (MSPs) e administradores de sistemas é listar os usuários em um sistema de computador. Hoje, vamos nos aprofundar em um script do PowerShell criado especificamente para isso: listar usuários locais. 

Histórico

Não há como negar que, no atual ambiente de TI de ritmo acelerado, a capacidade de extrair rapidamente dados sobre os usuários do sistema é inestimável. Isso é particularmente verdadeiro em grandes empresas ou sempre que um novo equipamento ou software estiver sendo implementado. Os administradores de sistemas e MSPs geralmente precisam entender quem tem acesso a quê e quando. O script do PowerShell fornecido atende a essa necessidade, listando os usuários locais em uma máquina Windows, permitindo que os profissionais obtenham insights rapidamente.

O roteiro

#Requires -Version 2.0

<#
.SYNOPSIS
    Lists local computers' users.
.DESCRIPTION
    Lists local computers' users. By default it lists only the enabled users.
.EXAMPLE
    No parameters needed.
    Lists enabled users on the local computer.
.EXAMPLE
     -AllUsers
    Lists enabled and disabled users on the local computer.
.EXAMPLE
    PS C:> List-Users.ps1 -AllUsers
    Lists enabled and disabled users on the local computer.
.OUTPUTS
    System.Management.Automation.SecurityAccountsManager.LocalUser[]
.NOTES
    Minimum OS Architecture Supported: Windows 7, Windows Server 2012
    Release Notes:
    Initial Release
.COMPONENT
    ManageUsers
#>

[CmdletBinding()]
param (
    # Will return disabled users as well as enabled users
    [Switch]
    $AllUsers
)

begin {
    Write-Output "Starting List Users"
}

process {
    # If we are running powershell under a 32bit OS or running a 32bit version of powershell
    # or we don't have access to Get-LocalUser
    if (
        [Environment]::Is64BitProcess -ne [Environment]::Is64BitOperatingSystem -or
            (Get-Command -Name "Get-LocalUser" -ErrorAction SilentlyContinue).Count -eq 0
    ) {
        # Get users from net.exe user
        $Data = $(net.exe user) | Select-Object -Skip 4
        # Check if the command ran the way we wanted and the exit code is 0
        if ($($Data | Select-Object -last 2 | Select-Object -First 1) -like "*The command completed successfully.*" -and $LASTEXITCODE -eq 0) {
            # Process the output and get only the users
            $Users = $Data[0..($Data.Count - 3)] -split 's+' | Where-Object { -not $([String]::IsNullOrEmpty($_) -or [String]::IsNullOrWhiteSpace($_)) }
            # Loop through each user
            $Users | ForEach-Object {
                # Get the Account active property look for a Yes
                $Enabled = $(net.exe user $_) | Where-Object {
                    $_ -like "Account active*" -and
                    $($_ -split 's+' | Select-Object -Last 1) -like "Yes"
                }
                # Output Name and Enabled almost like how Get-LocalUser displays it's data
                [PSCustomObject]@{
                    Name    = $_
                    Enabled = if ($Enabled -like "*Yes*") { $true }else { $false }
                }
            } | Where-Object { if ($AllUsers) { $_.Enabled }else { $true } }
        }
        else {
            exit 1
        }
    }
    else {
        try {
            if ($AllUsers) {
                Get-LocalUser
            }
            else {
                Get-LocalUser | Where-Object { $_.Enabled -eq $true }
            }
        }
        catch {
            Write-Error $_
            exit 1
        }
    }
}

end {
    Write-Output "Completed List Users"
}

 

Acesse mais de 300 scripts no NinjaOne Dojo

Obter acesso

Detalhamento

Em sua essência, o roteiro é bastante simples. Ele começa definindo um parâmetro, $AllUsers, que, quando invocado, inclui usuários habilitados e desabilitados em sua saída. No bloco ‘process’, o script primeiro verifica a arquitetura do sistema e a disponibilidade do cmdlet Get-LocalUser. Se houver uma incompatibilidade ou se o cmdlet não estiver disponível, ele voltará a usar o comando legado net.exe user. Os dados derivados de qualquer um dos métodos são processados para listar os usuários. Quando o comando net.exe user é utilizado, o script obtém o status do usuário, verificando se cada conta está ativa. Em seguida, ele gera esses dados de forma estruturada. Em cenários em que Get-LocalUser está disponível, ele busca e lista os usuários diretamente, filtrando apenas os habilitados, a menos que o parâmetro $AllUsers seja invocado.

Casos de uso em potencial

Imagine uma profissional de TI, Jane, implementando uma nova atualização de software em sua empresa. Antes de implementar a atualização, ela precisa verificar as contas de usuário em cada máquina para garantir que todas as licenças de software sejam atribuídas corretamente. Em vez de verificar manualmente cada computador, ela utiliza o script do PowerShell, economizando horas de seu valioso tempo.

Comparações

Embora o script utilize o cmdlet Get-LocalUser sempre que possível, sua abordagem alternativa usando o usuário net.exe é uma referência aos sistemas legados. Alguns outros scripts podem depender exclusivamente de cmdlets ou métodos mais recentes. A abordagem dupla do script fornecido garante a compatibilidade com uma ampla gama de sistemas Windows, tornando-o versátil em diversos ambientes.

Implicações

Uma lista de usuários em um computador pode fornecer uma visão geral dos possíveis pontos de acesso para pessoas não autorizadas. No contexto da segurança de TI, entender esses usuários e seus status é uma etapa fundamental para garantir que somente indivíduos autorizados tenham acesso.

Recomendações

  • Atualize regularmente seu PowerShell para ter acesso aos cmdlets mais recentes.
  • Sempre execute scripts de fontes confiáveis para garantir a segurança do sistema.
  • Audite regularmente as listas de usuários para garantir que contas não autorizadas não tenham sido adicionadas.

Considerações finais

O NinjaOne, com suas soluções robustas de gerenciamento de TI, complementa ferramentas como esse script do PowerShell. Quando os profissionais de TI listam os usuários locais usando nosso script do PowerShell, eles podem utilizar a plataforma abrangente da NinjaOne para gerenciar, monitorar e proteger esses usuários, garantindo que a infraestrutura de TI permaneça otimizada e segura.

FAQs

Ele foi projetado para o Windows 7 em diante e para o Windows Server 2012 em diante.

O script recorre automaticamente ao comando de usuário net.exe se Get-LocalUser não estiver disponível ou se houver uma incompatibilidade de arquitetura.

Próximas etapas

Montar uma equipe de TI eficaz requer uma solução centralizada que seja a principal ferramenta de entrega de serviços. Com NinjaOne, a TI monitora, gerencia, protege e oferece suporte a todos os dispositivos, onde quer que estejam, dispensando infraestrutura complexa no local.

Saiba mais sobre a solução NinjaOne Remote Script Deployment, agende uma demonstração, ou inicie sua avaliação gratuita da plataforma NinjaOne.

Categories:

You might also like