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.
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 603633
Url: https://administrator.de/forum/abfrage-eines-localen-users-603633.html
Ausgedruckt am: 19.05.2025 um 13:05 Uhr
4 Kommentare
Neuester Kommentar
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:
ist einfach verboten. Das gab automatisch die Fünf. Egal wie genial der Rest war.
Wenn Code trennen, dann über Funktionen. Das ist hier ein wenig Overkill. Aber egal:
hth
Erik
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}
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