claptrap
Goto Top

Powershell: ChangePasswordAtLogon

Guten Tag,

ich habe ein Powershell-Skript, mit welchem ich unter Verwendung diverser Checkboxen lokale User anlegen möchte. Bis auf CheckBox6 funktioniert auch alles. Ich möchte lediglich, das ein User, sofern Checkbox6 ausgewählt ist, (egal welche Konstellation) nicht aufgefordert wird, sein Kennwort zu ändern.

unbenannt

Vielen Dank für die Unterstützung

$ErrorActionPreference = "Stop"  
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# restart elevated if needed
if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){
    start powershell -Verb runas -ArgumentList '-File',$MyInvocation.MyCommand.Definition  
    exit
}

#####################################################################################################################################################

#create form
$form             = New-Object System.Windows.Forms.Form
$form.Width       = 500
$form.Height      = 700
$form.MaximizeBox = $false
$form.TopMost     = $true

#####################################################################################################################################################

$objLabel = New-Object System.Windows.Forms.label
$objLabel.Location = New-Object System.Drawing.Size(10,20)
$objLabel.Size = New-Object System.Drawing.Size(130,15)
$objLabel.BackColor = "Transparent"  
$objLabel.ForeColor = "Black"  
$objLabel.Text = "Username"  
$Form.Controls.Add($objLabel)

#textbox with choosen user name
$txtBox          = New-Object System.Windows.Forms.TextBox
$txtBox.Location = New-Object System.Drawing.Point (180, 20)
$txtBox.Size     = New-Object System.Drawing.Size(280,100)
$form.Controls.Add($txtBox)

#####################################################################################################################################################

$objLabel2 = New-Object System.Windows.Forms.label
$objLabel2.Location = New-Object System.Drawing.Size(10,50)
$objLabel2.Size = New-Object System.Drawing.Size(130,15)
$objLabel2.BackColor = "Transparent"  
$objLabel2.ForeColor = "Black"  
$objLabel2.Text = "Password"  
$Form.Controls.Add($objLabel2)

#textbox with choosen password 
$txtBox2          = New-Object Windows.Forms.MaskedTextBox
$txtBox2.PasswordChar = '*'    
$txtBox2.Location = New-Object System.Drawing.Point (180, 50)
$txtBox2.Size     = New-Object System.Drawing.Size(280,100)
$form.Controls.Add($txtBox2)


#####################################################################################################################################################

#create checkbox1
$checkBox          = New-Object System.Windows.Forms.CheckBox
$checkBox.Location = New-Object System.Drawing.Point (10, 100)
$checkBox.Size     = New-Object System.Drawing.Size(350,30)
$checkBox.Text     = "PasswordNeverExpires"  
$form.Controls.Add($checkBox)


#create checkbox2
$checkBox2          = New-Object System.Windows.Forms.CheckBox
$checkBox2.Location = New-Object System.Drawing.Point (10, 150)
$checkBox2.Size     = New-Object System.Drawing.Size(350,30)
$checkBox2.Text     = "UserMayChangePassword"  
$form.Controls.Add($checkBox2)

#create checkbox3
$checkBox3          = New-Object System.Windows.Forms.CheckBox
$checkBox3.Location = New-Object System.Drawing.Point (10, 200)
$checkBox3.Size     = New-Object System.Drawing.Size(350,30)
$checkBox3.Text     = "AccountNeverExpires"  
$form.Controls.Add($checkBox3)

#create checkbox4
$checkBox4          = New-Object System.Windows.Forms.CheckBox
$checkBox4.Location = New-Object System.Drawing.Point (10, 250)
$checkBox4.Size     = New-Object System.Drawing.Size(350,30)
$checkBox4.Text     = "AdminAccount"  
$form.Controls.Add($checkBox4)

#create checkbox5
$checkBox5          = New-Object System.Windows.Forms.CheckBox
$checkBox5.Location = New-Object System.Drawing.Point (10, 300)
$checkBox5.Size     = New-Object System.Drawing.Size(350,30)
$checkBox5.Text     = "noPassword"  
$checkbox5.Add_Click({
	# disable/enable other controls depending on state of current checkbox
        $checkBox.Enabled = !$checkBox5.Checked
        $txtBox2.Enabled = !$checkBox5.Checked
        $checkbox4.Enabled = !$checkBox5.Checked
})

$form.Controls.Add($checkBox5)

#create checkbox6
$checkBox6          = New-Object System.Windows.Forms.CheckBox
$checkBox6.Location = New-Object System.Drawing.Point (10, 350)
$checkBox6.Size     = New-Object System.Drawing.Size(350,30)
$checkBox6.Text     = "ChangePasswordAtLogon"  
$form.Controls.Add($checkBox6)


#create user button
$Button          = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(10,450)
$Button.Size     = New-Object System.Drawing.Size(150,50)
$Button.Text     = "create user"  
$Button.Add_Click({
    # Admin or Users Group
    $group = @{$true='S-1-5-32-544';$false='S-1-5-32-545'}[$checkbox4.checked]  
    try{
        # define options to create user
        $useroptions = @{
            Name = $txtbox.Text
            Description = $txtbox.Text
            Fullname = $txtbox.Text
            AccountNeverExpires = $checkbox3.Checked
            UserMayNotChangePassword = !$checkbox2.Checked
            ChangePasswordAtLogon = $checkbox6.Checked
        }
	# if the "noPassword" checkbox is not checked  
        if (!$checkbox5.Checked){
            $useroptions.Password = ConvertTo-SecureString $txtbox2.Text -AsPlainText -Force
            $useroptions.PasswordNeverExpires = $checkbox.Checked
        }else{
	    # "noPassword" checkbox is checked  
            $useroptions.NoPassword = $true
            $group = 'S-1-5-32-545'  
        }
        # create user and assign to administrators group
        New-LocalUser @useroptions | Add-LocalGroupMember -Group (Get-Localgroup | ? Sid -eq $group)
        [System.Windows.Forms.MessageBox]::Show("User has been created successfully.","User created",0,64)  
    }catch{
        [System.Windows.Forms.MessageBox]::Show("Error creating new user account:`n $($_.Exception.Message)","Exception",0,48)  
    }


})
$form.Controls.Add($Button)

#end
[void]$form.ShowDialog()

Content-Key: 3369511763

Url: https://administrator.de/contentid/3369511763

Printed on: May 9, 2024 at 05:05 o'clock

Member: colinardo
Solution colinardo Jul 18, 2022 updated at 10:01:27 (UTC)
Goto Top
Ich möchte lediglich, das ein User, sofern Checkbox6 ausgewählt ist, (egal welche Konstellation) nicht aufgefordert wird, sein Kennwort zu ändern.
#....
#..
$Button.Add_Click({
    # Admin or Users Group
    $group = @{$true='S-1-5-32-544';$false='S-1-5-32-545'}[$checkbox4.checked]  
    try{
        # define options to create user
        $useroptions = @{
            Name = $txtbox.Text
            Description = $txtbox.Text
            Fullname = $txtbox.Text
            AccountNeverExpires = $checkbox3.Checked
            UserMayNotChangePassword = !$checkbox2.Checked
        }
	# if the "noPassword" checkbox is not checked 
        if (!$checkbox5.Checked){
            $useroptions.Password = ConvertTo-SecureString $txtbox2.Text -AsPlainText -Force
            $useroptions.PasswordNeverExpires = $checkbox.Checked
        }else{
	    # "noPassword" checkbox is checked 
            $useroptions.NoPassword = $true
            $group = 'S-1-5-32-545'  
        }
        # create user and assign to administrators group
        $user = New-LocalUser @useroptions 
        $user | Add-LocalGroupMember -Group (Get-Localgroup | ? Sid -eq $group)

        # disable password change on next logon when checkbox6 is checked
        if ($checkbox6.Checked){
            $user | Set-LocalUser -PasswordNeverExpires $true
        }
        [System.Windows.Forms.MessageBox]::Show("User has been created successfully.","User created",0,64)  
    }catch{
        [System.Windows.Forms.MessageBox]::Show("Error creating new user account:`n $($_.Exception.Message)","Exception",0,48)  
    }
})
# ...
# ..
Gruß @colinardo

Powershell Leitfaden für Anfänger
Member: claptrap
claptrap Jul 19, 2022 at 06:19:22 (UTC)
Goto Top
@colinardo
Hat bestens funktioniert. Vielen Dank!