jamiep

Abfrage eines localen Users

Hallo miteinander,

ich habe eine kleine Frage im Thema Powershell.
Ich möchte ein Skript erstellen, damit wir bei der ersteinrichtung eines neuen Rechners nicht immer den lokalen Admin per Hand eintragen müssen
Folgendes Problem, ich möchte beim starten des Skripts vorher überprüfen, ob der Admin schon erstellt wurde, wenn ja dann soll ausgegeben werden, ist schon vorhanden oder so ähnlich.
Sollte der User noch nicht vorhanden sein, soll dieser erstellt werden. Das klappt soweit auch alles schon, aber der wiederholt die Schleife immer und immer wieder und beendet diese nicht.

Ich füge euch einmal das Skipt hinzu, damit ihr es besser nachvollziehen könnt.


$user = 'psadmin'  
$user_exist = (Get-LocalUser -Name $user)

while ($user_exist) {

    Write-Host "User existiert bereits"  

if (-not $user_exist) {break :DoSchleife}

}

    #=========================================================================
	#Abfrage des Passwortes
	#=========================================================================
	
	
	Write-Host "Geben Sie das Passwort für den lokalen Administrator ein."  
	$pw = Read-Host -AsSecureString -prompt 'psadmin Passwort bitte eingeben'  
    Start-Sleep -Seconds 5

:DoSchleife do{


	#=========================================================================
	#Erstellen des Benutzerkontos
	#=========================================================================
	
	New-LocalUser "psadmin" -AccountNeverExpires -PasswordNeverExpires -Password $pw -Description "Lokaler Admin."  
	
	Start-Sleep -Seconds 5
	
	#=========================================================================
	#Benutzerkonto in die Administrator-Gruppe verschieben
	#=========================================================================
	
	Add-LocalGroupMember -Group "Administratoren" -Member "psadmin"  
	
	Start-Sleep -Seconds 5

}

until ($user_exist)

Ich glaube dass das Problem ist, dass ich das bei Until die Falsche Abfrage mache. Könnte mir jemand sagen, was korrekt wäre, damit die Schleife endet, sobald der User vorhanden ist.
Und falls noch geht, ich möchte dass das Skipt nach 3 durchläufen automatisch aufhört.

Liebe Grüße
JamieP
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 603633

Url: https://administrator.de/forum/abfrage-eines-localen-users-603633.html

Ausgedruckt am: 19.05.2025 um 13:05 Uhr

SlainteMhath
SlainteMhath 10.09.2020 um 13:57:15 Uhr
Goto Top
Moin,

anstatt des ganzen while.... if.... break reicht dir doch ein einfaches if...else aus.

Also
if ($user_exist) {
 Write-Host "User existiert bereits"  
} else  {
 New-LocalUser ...
}

lg,
Slainte
JamieP
JamieP 10.09.2020 um 14:30:40 Uhr
Goto Top
Hallo Salinte,

ja ich weiß was du meinst, so hatte ich es auch zuvor,
aber das hatte ich vergessen dazu zu schreiben, dass das alles noch in ein GUI geht und da soll das per Knopfdruck gehen.
Und wenn das dann durchgelaufen ist, muss eine bestätigung kommen, dass diese Erfolgreich war. Deswegen die Schleife.
SlainteMhath
SlainteMhath 10.09.2020 aktualisiert um 15:55:53 Uhr
Goto Top
Ob's erfolgreich war bestimmt man mit einem Try...catch Konstrukt. Eine Schleife verwendet man, wenn etwas mehrfach ausgeführt weden soll - Gui hin oder her face-smile
erikro
erikro 10.09.2020 aktualisiert um 19:03:20 Uhr
Goto Top
Moin,

tja, while heißt halt: Mache das so lange, bis die Bedingung falsch ist. Da Du aber $user_exist nirgends in der Schleife vernichtest, ist die Bedingung endlos wahr.

Auch das do-until ist unsinnig. So macht man das nicht.

Und das hier:
if (-not $user_exist) {break :DoSchleife}
ist einfach verboten. Das gab automatisch die Fünf. Egal wie genial der Rest war. face-wink Wenn Code trennen, dann über Funktionen. Das ist hier ein wenig Overkill. Aber egal:

PARAM (

    $user="psadmin"  

)


function create-newadmin {

    PARAM (

        $newuser,
        $password

    )
    
    New-LocalUser "psadmin"`  
    -AccountNeverExpires`
    -PasswordNeverExpires`
    -Password $password`
    -Description "Lokaler Admin."`  
    -ErrorAction Continue
    #edit: Da hatte sich doch ein kleiner Fehler eingeschlichen. 

    Start-Sleep 5
    Add-LocalGroupMember -Group "Administratoren" -Member "psadmin" -ErrorAction Continue  
    

}


try {

    Get-LocalUser -Name $user -ErrorAction Continue

}

catch {

    $pw = Read-Host -AsSecureString -prompt 'psadmin Passwort bitte eingeben'  
    create-newadmin -newuser $user -password $pw

}

finally {

    $user_exist = (Get-LocalUser -Name $user)
    
    if(-not $user_exist) {

        #Fehlerbehandlung: Was auch immer Du machen willst,
        #wenn es nicht geklappt hat.

    }
    else {

        #Was auch immer Du machen willst, wenn es geklappt hat.


    }
}

hth

Erik