[PowerShell] ALLE angemeldeten User auslesen

KaeTuuN

Rear Admiral
Registriert
Okt. 2002
Beiträge
5.305
Hallo zusammen,

ich habe gerade ein kleines Problem mit PowerShell und finde keine Lösung. Ich hätte gerne eine Funktion, die mir ALLE angemeldeten Benutzernamen zurückgibt.
Mit folgender Abfrage
Code:
Get-WMIObject -class Win32_ComputerSystem | select username
bekomme ich leider nur den Benutzer angezeigt, der das Skript ausführt. Eigentlich müsste ich aber fünf Ergebnisse bekommen. Wo liegt mein Fehler?

Mfg Kae
 
Wieviel Benutzer sind denn gleichzeitig angemeldet, doch wohl nur einer (1)?
 
Ich habe zwei anmgeldete Nutzer, wovon allerdings nur eine Session aktuell aktiv ist. Das ist aber erstmal egal.
Das Problem ist, dass das Skript nachher im Systemkontext agiert und dann auf angemeldete User überprüfen soll. Da es dann aber nur den Systemuser findet, ist augenscheinlich keiner angemeldet, was fatale folgen haben könnte.

Mfg Kae
 
werkam schrieb:
Wieviel Benutzer sind denn gleichzeitig angemeldet, doch wohl nur einer (1)?

Unter NT-Systemen ist neben dem Benutzer aus Fleisch zusätzlich mindestens noch SYSTEM angemeldet. Außerdem können sich natürlich beliebig viele Benutzer über das Netzwerk anmelden.
 
So, mit folgender Funktion erhalte ich alle angemeldeten User. Allerdings muss ich noch ein wenig an der Formatierung arbeiten.
Code:
Function Get-LoggedOnUsers {
    $computername = $env:COMPUTERNAME
    Get-WmiObject -Class Win32_LogonSession -ComputerName $computername |
    foreach {
        $LogonId = $_.__RELPATH -replace """", "'"
        Get-WmiObject -ComputerName $computername -Query "ASSOCIATORS OF {$LogonId} WHERE ResultClass = Win32_Account" | select "Caption"
    }
}

Get-LoggedOnUsers

Mfg Kae

EDIT: Wenn es interssiert, hier noch eine für mich bessere Variante:
Code:
Function Get-LoggedOnUsers {
    $computername = $env:COMPUTERNAME
    Get-WmiObject -Class Win32_LogonSession -ComputerName $computername |
    ForEach {
        $LogonId = $_.__RELPATH -replace """", "'"
        Get-WmiObject -ComputerName $computername -Query "ASSOCIATORS OF {$LogonId} WHERE ResultClass = Win32_Account" | 
        Where-Object {$_.Domain -eq $Domain} | select "Name"
    }
}
 
Zuletzt bearbeitet:
Zurück
Oben