Wie lege ich einen lokalen Benuterz mithilfe eines Powersehll Skript an?

2 Antworten

Bevor Du dich mit dem ganzen GUI-Schnickscnack befasst, sollten wenigstens die Basics um das erstellen eines Nutzerprofils sitzen

so die Theorie...

New-LocalUser -Name 'TestUser001' -NoPassword

...erstellt einen neuen localen Nutze ohne Passwort... macht er auch. aber er erscheint nicht im Startmenü. Im Gegensatz zum Cmd-Berfehl: net user "TestUser001" /add weist Powershell den Nutzer nicht automatisch einer Gruppe zu. und da unser neuer Nutzer keiner Gruppe angehört, weiß unser Startmenü/LoginScreen auch nicht wie Dieser zu handhaben ist.

Die Gruppen kannst Du mit Get-LocalGroup anzeigen. Relevant sind nur Administrtoren und Benutzer für Dich.

Add-LocalGroupMember -Group "Benutzer" -Member "TestUser001"

..und der Neue Nutzer erscheint im Startmenü/Anmeldebildschirm. Achtung die GruppenNamen funktionieren nur mit einem deutschen Windows!!!! (wie man dass für international macht ist hier erstmal unwichtig)

Jetzt kommt der nächste Fallstrick:

Wenn Du den FullName angibst, wird der Parameter -nopasswort ignoriert und der neue Nutzer muss bei der ersten Anmeldung ein Passwort angeben! Das kannst Du umgehen indem du den neuen Nutzer einfach mit einem leeren Passwort erzeugen lässt.

New-LocalUser -Name "TestUser002" -FullName "Test Nutzer 2" -Password ([securestring]::new())
Add-LocalGroupMember -Group "Benutzer" -Member "TestUser002"

töräääääh....

Nun wollen wir die beide Vögel auch wieder loswerden...

Remove-LocalUser -Name "TestUser001"
Remove-LocalUser -Name "TestUser002"

Nicht vergessen die Ordner der Nutzer unter C:\users\ zu löschen, falls Du dich schon mal eingeloggt haben solltest. sonst bastelt Windows wieder eigene Ordnernnamen wenn der gleiche Nutzename erneut auftaucht

Remove-Item "c:\users\TestUser001" -Recurse -Force
Remove-Item "c:\users\TestUser002" -Recurse -Force

...Soviel zum Kerngeschäft.

nun Deine GUI:

der ganze New-Object System.Drawing..... Qatsch ist Idiodie von Leuten , welche seit 15 Jahren abschreiben/pasten... Powershell erkennt selbstständig den Datentyp .Size/.Point ... einfach die Werte als String zuweisen

Ich spendiere auch noch einen Elevator-Stub, den um mit Localuser zu arbeiten benötigt man Adminrechte

 #script selbständig als admin starten
if (!$([Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544')){
  Start-Process powershell.exe -Verb RunAs -ArgumentList ('-executionpolicy bypass -file "{0}" -elevated' -f $pscommandpath)
  exit $LASTEXITCODE
}
#ab hier alles, was als Admin laufen soll...
'ich laufe als Admin'

Add-Type -AssemblyName System.Windows.Forms

$form = New-Object System.Windows.Forms.Form
$form.Text = 'lokaler Benutzer'
$form.Size = '300,200'
$form.StartPosition = 'CenterScreen'
$form.Topmost = $true

$label1 = New-Object System.Windows.Forms.Label
$label1.Location = '10,20'
$label1.Size = '280,20'
$label1.Text = 'Benutzername:'

$label2 = New-Object System.Windows.Forms.Label
$label2.Location = '10,70'
$label2.Size = '280,20'
$label2.Text = 'vollstaendiger Name:'

$ProfileName = New-Object System.Windows.Forms.TextBox
$ProfileName.Location = '10,40'
$ProfileName.Size = '260,20'

$FullName = New-Object System.Windows.Forms.TextBox
$FullName.Location ='10,90'
$FullName.Size = '260,20'

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = '75,120'
$okButton.Size = '75,23'
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = '150,120'
$cancelButton.Size = '75,23'
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton

#alle Subobjekte in einem Rutsch adden
$label1, $label2, $ProfileName, $FullName, $okButton, $cancelButton |%{$form.Controls.Add($_)}

$result = $form.ShowDialog()

 #das passiert nachdem der Dialog geschlossen wurde...
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{  #Parameter aus den Inputs des Dialogs übernehmen
  $params = @{
    Name    = $ProfileName.Text
    FullName  = $FullName.Text
    Password  = $([securestring]::new())
    Description = 'Schnuffeldischneuz'
  }
  $Null=New-LocalUser @params
  Add-LocalGroupMember -Group "Benutzer" -Member $params.Name
  Get-LocalUser $params.Name |Format-List *
}
pause

...funktioniert und weil ich alles was ich hier poste auch teste... muss ich erstmal meinen Rechner mit dem Kärcher reinigen 😅😅😅


Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Fehlermeldung wäre sinnvoll gewesen.

Du wirst noch ein Passwort mitgeben müssen oder den "-nopassword" Parameter verwenden

Woher ich das weiß:Berufserfahrung – arbeite seit vielen Jahren in der IT
Erzesel  03.08.2023, 14:47

nö daran liegts nicht...

$textBox.Text ist nicht definiert... ergo wir auch nix übergeben.

zudem weist New-LocalUser nicht automatisch eine Gruppenbindung zu, also existiert der neue Nutzer zwar, aber es können nur Nutzer von sichtbaren Gruppen, in der Anmeldung angezeigt werden (Administrator,Benutzer,Gast). Also wird ein neuer Nutzer eben nicht angzeigt....

siehe oben

0