Powershell: Nutzer einer Gruppe als Microsoft.Powershell.Commands.LocalPrincipal abrufen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Ein typischer Fehler von Administratoren auf nicht englischsprachigen Systemen.

Viele Bezeichnungen sind der jeweiligen Landessprache entlehnt. wenn man nur das abschreibt was in den internationalen Foren in englisch kommuniziert wird, bekommt man auch nicht die gewünschte Ergebnis. Man muss also bei "uns" die deutschen Bezeichner nutzen :

Administratoren, Benutzer, Gerätebesitzer, Gäste, Hauptbenutzer usw. 

Für international wirksame Scripte kann man die den Gruppen zugehörige SID nutzen.

Zeige alle Gruppen mit SID:

Get-LocalGroup|select -property Name,Sid

Nun kannst Du für Dein Vorhaben mit dem deutschen "Wortschatz" arbeiten:

Get-LocalGroupMember -Name "Remotedesktopbenutzer"|ForEach-Object{ Write-Host mache irgenddwas: $_}
Get-LocalGroupMember -Name "Administratoren"|%{ Write-Host mache irgenddwas: $_}

oder du verwendest SIDs:

Get-LocalGroupMember -sid S-1-5-32-555|%{ Write-Host mache irgenddwas: $_}
Get-LocalGroupMember -sid S-1-5-32-544|%{ Write-Host mache irgenddwas: $_}

Deine ganzes Script sähe einfach so aus:

Get-LocalUser -Name "Remotedesktopbenutzer" | Enable-LocalUser
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Heartbleed 
Fragesteller
 31.07.2022, 09:38

Ich arbeite über RDP auf einer Windows Server 2022 Umgebung mit der Systemsprache auf Englisch, nicht auf Deutsch. Ich bezweifle daher, dass darin das Problem liegt. Vielen Dank aber für den letzten Abschnitt; mir war bis anhin nicht klar, dass das CMDlet Get-LocalUser auch nach Gruppenprinzipalen filtern kann. Ich werde mich in die angegebenen Artikel einlesen, vielleicht lässt sich auf diese Weise ein weiteres Nachfragen verhindern.

Zuletzt noch zu:

"Get-LocalGroupMember -Name "Remotedesktopbenutzer"|ForEach-Object{ Write-Host mache irgenddwas: $_}

Get-LocalGroupMember -Name "Administratoren"|%{ Write-Host mache irgenddwas: $_}"

Get-LocalGroupMember gibt Objekte vom Typ System.Object zurück (letztlich möglicherweise bloß eine WMI-Abfrage?). Enable-LocalUser nimmt als Argument allerdings nur Objekte vom Typen Microsoft.PowerShell.Commands.LocalPrincipal entgegen, bzw., Get-LocalUser gibt Objekte vom Typen Microsoft.PowerShell.Commands.LocalPrincipal zurück.

Damit verbleibt dann wie gesagt nur die oben beschriebene Methode über eine Pipe über Get-LocalUser, bei letzterem der Umstand bestehend, dass ich Beschriebenes nicht wusste.

0
Erzesel  31.07.2022, 10:46
@Heartbleed

Wenn die Objekte nicht "passen" schaut man sich die Ausgabe Cmdlets an:

Get-LocalGroupMember -Name "Administratoren"|fl *

...und entscheidet mit welchen daten man bei folgenden Cmdlet in der Pipe weiter kommt... Enable-LocalUser erwartet als Inputparameter Namen als String(s) oder SIDs (die Objekte will es ja nicht)

Get-LocalGroupMember übergibt den Namen allerdings als Pfad mit Rechnernamen. Kein Akt pfade kann man Spalten...

Get-LocalGroupMember -Name "Administratoren"|
    %{
        $PureName=Split-Path $_.Name -leaf
        Write-Host Name ohne Rechner: $PureName  -fo green
        Enable-LocalUser -name $PureName -whatif  #das -whatif simuliert...ohne reale Wirkung
    }
pause

....oder Du übergibst einfach die SIDs...

Get-LocalGroupMember -Name "Administratoren"|%{Enable-LocalUser -name $_.SID -whatif}

das ist Doch das tolle an Powershell... wenns nicht passt wirds passen gemacht...

0