commit a0400a32ecd8a60118f8e6f4d43d78e430aab96f Author: Jason SECULA Date: Thu Jun 5 09:33:18 2025 +0200 Initial commit diff --git a/laps.ps1 b/laps.ps1 new file mode 100644 index 0000000..05ee213 --- /dev/null +++ b/laps.ps1 @@ -0,0 +1,244 @@ +Add-Type -AssemblyName System.Windows.Forms +Add-Type -AssemblyName System.Drawing + +$form = New-Object System.Windows.Forms.Form +$form.Text = 'LAPS' +$form.Size = New-Object System.Drawing.Size(380,180) +$form.StartPosition = 'CenterScreen' +$form.MaximizeBox = $false +$form.MinimizeBox = $false +$form.FormBorderStyle = 'Fixed3D' + +$usernameLabel = New-Object System.Windows.Forms.Label +$usernameLabel.Location = New-Object System.Drawing.Point(30,20) +$usernameLabel.Text = 'Identifiant :' + +$usernameTextbox = New-Object System.Windows.Forms.TextBox +$usernameTextbox.Location = New-Object System.Drawing.Point(120,20) +$usernameTextbox.Size = New-Object System.Drawing.Size(200,20) +#$usernameTextbox.PlaceholderText = 'admin-uid' + +$passwordLabel = New-Object System.Windows.Forms.Label +$passwordLabel.Location = New-Object System.Drawing.Point(30,50) +$passwordLabel.Text = 'Mot de passe :' + +$passwordTextbox = New-Object System.Windows.Forms.TextBox +$passwordTextbox.Location = New-Object System.Drawing.Point(120,50) +$passwordTextbox.Size = New-Object System.Drawing.Size(200,20) +$passwordTextbox.PasswordChar = '*' + +$errorLabel = New-Object System.Windows.Forms.Label +$errorLabel.Location = New-Object System.Drawing.Point(30,100) +$errorLabel.Size = New-Object System.Drawing.Size(200,20) +$errorLabel.Visible = $false + +$ValidateCreds = { + try{ + if($usernameTextbox.Text -eq ''){ + $errorLabel.Text = 'Identifiant manquant' + $errorLabel.ForeColor = 'DarkRed' + $errorLabel.Visible = $true + return + } + if($passwordTextbox.text -eq ''){ + $errorLabel.Text = 'Mot de passe manquant' + $errorLabel.ForeColor = 'DarkRed' + $errorLabel.Visible = $true + return + } + $password = ConvertTo-SecureString $passwordTextbox.text -AsPlainText -Force + $creds = New-Object System.Management.Automation.PsCredential "ac-bureautique\$($usernameTextbox.Text)", $password + Get-LapsADPassword -Identity $env:COMPUTERNAME -Credential $creds + $form.DialogResult = 'OK' + $form.Close() + }catch{ + $exitCode = $_.exception.errorcode + $errorLabel.Visible = $true + $errorLabel.ForeColor = 'DarkRed' + if($exitCode -eq 49){ + $errorLabel.Text = 'Mauvais identifiant/mot de passe' + }else{ + $errorLabel.Text = $_ + } + } +} + +$generateLapsButton = New-Object System.Windows.Forms.Button +$generateLapsButton.Text = 'OK' +$generateLapsButton.Location = New-Object System.Drawing.Point(240,100) +$generateLapsButton.Add_Click($ValidateCreds) +$form.AcceptButton = $generateLapsButton + +$form.Controls.add($usernameTextbox) +$form.Controls.add($passwordTextbox) +$form.Controls.add($passwordLabel) +$form.Controls.add($errorLabel) +$form.Controls.add($usernameLabel) +$form.Controls.add($generateLapsButton) + +$result = $form.ShowDialog() +#$result = 'OK' + +if($result -ne 'OK'){ + exit 0 +} + +$password = ConvertTo-SecureString $passwordTextbox.text -AsPlainText -Force +$creds = New-Object System.Management.Automation.PsCredential "ac-bureautique\$($usernameTextbox.Text)", $password + +$form.dispose() + +$machineForm = New-Object System.Windows.Forms.Form +$machineForm.Text = 'LAPS' +$machineForm.Size = New-Object System.Drawing.Size(470,270) +$machineForm.StartPosition = 'CenterScreen' +$machineForm.MaximizeBox = $false +$machineForm.MinimizeBox = $false +$machineForm.FormBorderStyle = 'Fixed3D' + +# computer fields +# label +$computerNameLabel = New-Object System.Windows.Forms.Label +$computerNameLabel.Location = New-Object System.Drawing.Point(30,20) +$computerNameLabel.Size = New-Object System.Drawing.Size(120,20) +$computerNameLabel.Text = "Nom de l'ordinateur" +# textbox +$computerNameTextbox = New-Object System.Windows.Forms.TextBox +$computerNameTextbox.Location = New-Object System.Drawing.Point(150,20) +$computerNameTextbox.Size = New-Object System.Drawing.Size(200,20) + +# calendar +# label +$calendarLabel = New-Object System.Windows.Forms.Label +$calendarLabel.Location = New-Object System.Drawing.Point(30,70) +$calendarLabel.Text = "Date d'expiration" +$calendarLabel.Visible = $false +# calendar +$calendar = New-Object System.Windows.Forms.DateTimePicker +$calendar.Format = [windows.forms.datetimepickerFormat]::custom +$calendar.CustomFormat = "dd/MM/yyyy HH:mm:ss" +#$calendar.MinDate = [DateTime]::Now +$calendar.Location = New-Object System.Drawing.Point(150,70) +$calendar.Visible = $false + +# laps fields +# label +$lapsPasswordLabel = New-Object System.Windows.Forms.Label +$lapsPasswordlabel.Location = New-Object System.Drawing.Point(30,120) +$lapsPasswordlabel.Size = New-Object System.Drawing.Size(120,20) +$lapsPasswordlabel.Text = "Mot de passe LAPS" +$lapsPasswordlabel.Visible = $false +# textbox +$lapsPasswordTextbox = New-Object System.Windows.Forms.TextBox +$lapsPasswordTextbox.Location = New-Object System.Drawing.Point(150,120) +$lapsPasswordTextbox.Size = New-Object System.Drawing.Size(200,20) +$lapsPasswordTextbox.ReadOnly = $true +$lapsPasswordTextbox.Visible = $false + +$copyPassword = { + if($lapsPasswordTextbox.text -ne ''){ + $lapsPasswordTextbox.text | Set-Clipboard + } +} + +$copyButton = New-Object System.Windows.Forms.Button +$copyButton.Location = New-Object System.Drawing.Point(360,120) +$copyButton.Text = 'Copier' +$copyButton.Add_Click($copyPassword) +$copyButton.visible = $false +$copyButton.Enabled = $false + +$errorLabel = New-Object System.Windows.Forms.Label +$errorLabel.Location = New-Object System.Drawing.Point(30,170) +$errorLabel.Size = New-Object System.Drawing.Size(240,60) +$errorLabel.Visible = $false + +$generateLaps = { + $identity = $computerNameTextbox.Text + $effective = $calendar.Value + try{ + $var = Set-LapsADPasswordExpirationTime -Identity $identity -Credential $creds -WhenEffective $effective -ErrorAction Stop + $laps = Get-LapsADPassword -Identity $identity -DecryptionCredential $creds -Credential $creds -AsPlainText -ErrorAction Stop + $lapsPasswordTextbox.text = $laps.Password + $errorLabel.Visible = $false + }catch{ + switch($_){ + "Cannot bind argument to parameter 'Identity' because it is an empty string." { $errorLabel.text = "Nom d'ordinateur manquant" } + "Failed to find the '$($identity)' computer in AD" { $errorLabel.text = "Impossible de trouver l'ordinateur $($identity) dans l'AD" } + default { $errorLabel.text = "$_" } + } + $lapsPasswordTextbox.text = '' + $errorLabel.ForeColor = 'DarkRed' + $errorLabel.Visible = $true + } +} + +# label + +# generate button +$generateLapsButton = New-Object System.Windows.Forms.Button +$generateLapsButton.Add_Click($generateLaps) +$generateLapsButton.Location = New-Object System.Drawing.Point(280,170) +$generateLapsButton.Size = New-Object System.Drawing.Size(80,20) +$generateLapsButton.text = 'Mettre à jour' +$generateLapsButton.Visible = $false + +$showLaps = { + $identity = $computerNameTextbox.Text + $copyButton.Visible = $false + $lapsPasswordTextbox.Visible = $false + $lapsPasswordLabel.Visible = $false + $calendarLabel.Visible = $false + $calendar.Visible = $false + $generateLapsButton.Visible = $false + $calendar.MinDate = [DateTime]'01/01/1970' + try{ + $laps = Get-LapsADPassword -Identity $identity -DecryptionCredential $creds -Credential $creds -AsPlainText -ErrorAction Stop + $lapsPasswordTextbox.text = $laps.Password + if($laps.Password -eq ''){ + $copyButton.Enabled = $false + }else{ + $copyButton.Enabled = $true + } + $errorLabel.Visible = $false + $copyButton.Visible = $true + $calendar.Value = [DateTime]$laps.ExpirationTimestamp + $calendar.MinDate = [DateTime]::Now + $lapsPasswordTextbox.Visible = $true + $lapsPasswordLabel.Visible = $true + $calendarLabel.Visible = $true + $calendar.Visible = $true + $generateLapsButton.Visible = $true + }catch{ + switch($_){ + "Cannot bind argument to parameter 'Identity' because it is an empty string." { $errorLabel.text = "Nom d'ordinateur manquant" } + "Failed to find the '$($identity)' computer in AD" { $errorLabel.text = "Impossible de trouver l'ordinateur $($identity) dans l'AD" } + default { $errorLabel.text = "$_" } + } + $lapsPasswordTextbox.text = '' + $errorLabel.ForeColor = 'DarkRed' + $errorLabel.Visible = $true + } +} + +$showLapsButton = New-Object System.Windows.Forms.Button +$showLapsButton.Location = New-Object System.Drawing.Point(360,18) +$showLapsButton.Text = 'Chercher' +$showLapsButton.Add_Click($showLaps) + +$machineForm.Controls.add($computerNameLabel) +$machineForm.Controls.add($computerNameTextbox) +$machineForm.Controls.add($showLapsButton) +$machineForm.Controls.add($calendarLabel) +$machineForm.Controls.add($calendar) +$machineForm.Controls.add($lapsPasswordLabel) +$machineForm.Controls.add($lapsPasswordTextbox) +$machineForm.Controls.add($copyButton) +$machineForm.Controls.add($errorLabel) +$machineForm.Controls.add($generateLapsButton) + +$result = $machineForm.ShowDialog() + +$machineForm.dispose() + +exit 0 \ No newline at end of file