PowerShell ist ein leistungsfähiges Tool im Arsenal von IT-Expert:innen, das häufig für die Automatisierung von Aufgaben und die nahtlose Extraktion von Daten genutzt wird. Eine kritische Aufgabe, mit der Managed Service Provider (MSPs) und Systemadministratoren häufig konfrontiert werden, ist die Auflistung von Benutzer:innen in einem Computersystem. Heute befassen wir uns mit einem PowerShell-Skript, das speziell für diesen Zweck entwickelt wurde: zum Auflisten lokaler Benutzer:innen.
Hintergrund
In der heutigen schnelllebigen IT-Umgebung ist die Möglichkeit, schnell Daten über Systembenutzer:innen zu extrahieren, unbestreitbar von unschätzbarem Wert. Dies gilt vor allem in großen Unternehmen oder wenn neue Geräte oder Software eingeführt werden. Systemadministratoren und MSPs müssen oft wissen, wer wann auf was Zugriff hat. Das mitgelieferte PowerShell-Skript erfüllt diese Anforderung, indem es lokale Benutzer:innen auf einem Windows-Computer auflistet, so dass Fachleute schnell Einblicke gewinnen können.
Das Skript
#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" }
Zugriff auf über 300 Skripte im NinjaOne Dojo
Detailansicht
Im Kern ist das Drehbuch recht einfach. Es beginnt mit der Definition des Parameters $AllUsers, der bei seinem Aufruf sowohl aktivierte als auch deaktivierte Benutzer:innen in die Ausgabe einbezieht. Im Block „prozess“ überprüft das Skript zunächst die Systemarchitektur und die Verfügbarkeit des Cmdlets “ Get-LocalUser „. Wenn eine Nichtübereinstimmung vorliegt oder das Cmdlet nicht verfügbar ist, wird auf den älteren net.exe-Benutzerbefehl zurückgegriffen. Die aus beiden Methoden abgeleiteten Daten werden dann verarbeitet, um die Benutzer aufzulisten. Wenn der Befehl net.exe user verwendet wird, ruft das Skript den Benutzerstatus ab und prüft, ob jedes Konto aktiv ist. Anschließend werden diese Daten strukturiert ausgegeben. In Szenarien, in denen Get-LocalUser verfügbar ist, werden die Benutzer:innen direkt abgerufen und aufgelistet, wobei nur die aktivierten Benutzer:innen gefiltert werden, sofern nicht der Parameter $AllUsers aufgerufen wird.
Potenzielle Anwendungsfälle
Stellen Sie sich eine IT-Fachkraft, Jane, vor, die in ihrem Unternehmen ein neues Software-Update einführt. Vor der Bereitstellung des Updates muss sie die Benutzerkonten auf jedem Rechner überprüfen, um sicherzustellen, dass alle Softwarelizenzen korrekt zugewiesen sind. Anstatt jeden Computer manuell zu überprüfen, setzt sie das PowerShell-Skript ein und spart so Stunden ihrer wertvollen Zeit.
Vergleiche
Während das Skript nach Möglichkeit das Cmdlet “ Get-LocalUser “ verwendet, ist der alternative Ansatz mit net.exe user eine Anspielung auf ältere Systeme. Einige andere Skripte verlassen sich möglicherweise nur auf neuere Cmdlets oder Methoden. Der duale Ansatz des bereitgestellten Skripts gewährleistet die Kompatibilität mit einer Vielzahl von Windows-Systemen und macht es vielseitig in unterschiedlichen Umgebungen einsetzbar.
FAQs
- Kann das Skript auf jedem Windows-Rechner verwendet werden?
Es ist für Windows 7 und Windows Server 2012 und höher konzipiert.
- Was ist, wenn Get-LocalUser auf meinem System nicht verfügbar ist?
Das Skript greift automatisch auf den net.exe-Benutzerbefehl zurück, wenn Get-LocalUser nicht verfügbar ist oder die Architektur nicht übereinstimmt.
Auswirkungen
Eine Liste der Benutzer:innen eines Computers kann einen Überblick über potenzielle Zugriffspunkte für unbefugtes Personal geben. Im Kontext der IT-Sicherheit ist das Verständnis dieser Benutzer und ihres Status ein grundlegender Schritt, um sicherzustellen, dass nur autorisierte Personen Zugang haben.
Empfehlungen
- Aktualisieren Sie Ihre PowerShell regelmäßig, um Zugriff auf die neuesten Cmdlets zu haben.
- Führen Sie immer Skripte aus vertrauenswürdigen Quellen aus, um die Systemsicherheit zu gewährleisten.
- Prüfen Sie regelmäßig die Benutzerlisten, um sicherzustellen, dass keine nicht autorisierten Konten hinzugefügt wurden.
Abschließende Überlegungen
NinjaOne mit seinen robusten IT-Management-Lösungen ergänzt Tools wie dieses PowerShell-Skript. Wenn IT-Profis lokale Benutzer:innen mit unserem PowerShell-Skript auflisten, können sie die umfassende Plattform von NinjaOne nutzen, um diese Benutzer:innen zu verwalten, zu überwachen und abzusichern und so sicherzustellen, dass die IT-Infrastruktur sowohl optimiert als auch sicher bleibt.