Fix: retry password prompt on failure to prevent script halting (#3581)

* Fix: retry password prompt on failure to prevent script halting

* Update Invoke-WPFInstall.ps1

* format fix
This commit is contained in:
Akhil Kumar Achanta 2025-09-16 15:16:04 -04:00 committed by GitHub
parent af7030d536
commit 7db0b8a857
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -39,42 +39,54 @@ function Invoke-WPFInstall {
$user = $env:USERNAME $user = $env:USERNAME
Get-LocalUser | Where-Object Enabled -eq $true | ForEach-Object { Get-LocalUser | Where-Object Enabled -eq $true | ForEach-Object {
try { $validPassword = $false
$myPasswordIsBlank = $PrincipalContext.ValidateCredentials($user, $null) while (-not $validPassword) {
} catch { try {
$form = New-Object System.Windows.Forms.Form $myPasswordIsBlank = $PrincipalContext.ValidateCredentials($user, $null)
$form.Text = "Set password for $user" $validPassword = $true
$form.Size = New-Object System.Drawing.Size(500, 200) } catch {
$form = New-Object System.Windows.Forms.Form
$form.Text = "Set password for $user"
$form.Size = New-Object System.Drawing.Size(500, 200)
$label = New-Object System.Windows.Forms.Label $label = New-Object System.Windows.Forms.Label
$label.Text = 'Maybe a program needs to be installed in "usermode" and you have no password set, you need to set it here. After putting a password into the text box a page asking for your password might open (not right after). If you keep the text box empty, nothing will happen. $label.Text = 'Admin mode install failed. Set a USER password for login and user-based installation.'
REMEMBER THE PASSWORD FOR THE FUTURE. YOU WILL NEED FOR STUFF AND TO LOGIN IF AUTOLOGIN ISN`T SET' $label.Size = New-Object System.Drawing.Size(480, 60)
$label.Size = New-Object System.Drawing.Size(480, 60) $label.Location = New-Object System.Drawing.Point(10, 10)
$label.Location = New-Object System.Drawing.Point(10, 10) $form.Controls.Add($label)
$form.Controls.Add($label)
$passwordBox = New-Object System.Windows.Forms.TextBox $passwordBox = New-Object System.Windows.Forms.TextBox
$passwordBox.Size = New-Object System.Drawing.Size(380, 20) $passwordBox.Size = New-Object System.Drawing.Size(380, 20)
$passwordBox.UseSystemPasswordChar = $true $passwordBox.UseSystemPasswordChar = $true
$passwordBox.Location = New-Object System.Drawing.Point(10, 125) $passwordBox.Location = New-Object System.Drawing.Point(10, 125)
$form.Controls.Add($passwordBox) $form.Controls.Add($passwordBox)
$button = New-Object System.Windows.Forms.Button $button = New-Object System.Windows.Forms.Button
$button.Text = 'Submit' $button.Text = 'Submit'
$button.Size = New-Object System.Drawing.Size(75, 23) $button.Size = New-Object System.Drawing.Size(75, 23)
$button.Location = New-Object System.Drawing.Point(400, 125) $button.Location = New-Object System.Drawing.Point(400, 125)
$button.Add_Click({ $button.Add_Click({
$password = $passwordBox.Text | ConvertTo-SecureString -AsPlainText -Force $password = $passwordBox.Text | ConvertTo-SecureString -AsPlainText -Force
if ($password) { if ($password) {
Set-LocalUser -Name $user -Password $password try {
$Form.Close() Set-LocalUser -Name $user -Password $password
} else { $validPassword = $PrincipalContext.ValidateCredentials($user, $passwordBox.Text)
[System.Windows.Forms.MessageBox]::Show('No password entered!') if ($validPassword) {
$form.Close()
} else {
[System.Windows.Forms.MessageBox]::Show('Invalid password! Please try again.')
}
} catch {
[System.Windows.Forms.MessageBox]::Show('Error setting password!')
}
} else {
[System.Windows.Forms.MessageBox]::Show('No password entered!')
}
})
$form.Controls.Add($button)
$form.ShowDialog() | Out-Null
} }
}) }
$form.Controls.Add($button)
$form.ShowDialog() | Out-Null
}
} }
Show-WPFInstallAppBusy -text "Installing apps..." Show-WPFInstallAppBusy -text "Installing apps..."