diff --git a/LoginScreen.xaml b/LoginScreen.xaml
new file mode 100644
index 0000000..dbcb634
--- /dev/null
+++ b/LoginScreen.xaml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SearchScreen.xaml b/SearchScreen.xaml
new file mode 100644
index 0000000..72dc665
--- /dev/null
+++ b/SearchScreen.xaml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Xceed.Wpf.AvalonDock.Themes.Aero.dll b/Xceed.Wpf.AvalonDock.Themes.Aero.dll
new file mode 100644
index 0000000..fc34dd8
Binary files /dev/null and b/Xceed.Wpf.AvalonDock.Themes.Aero.dll differ
diff --git a/Xceed.Wpf.AvalonDock.Themes.Metro.dll b/Xceed.Wpf.AvalonDock.Themes.Metro.dll
new file mode 100644
index 0000000..73fa8e2
Binary files /dev/null and b/Xceed.Wpf.AvalonDock.Themes.Metro.dll differ
diff --git a/Xceed.Wpf.AvalonDock.Themes.VS2010.dll b/Xceed.Wpf.AvalonDock.Themes.VS2010.dll
new file mode 100644
index 0000000..606fab9
Binary files /dev/null and b/Xceed.Wpf.AvalonDock.Themes.VS2010.dll differ
diff --git a/Xceed.Wpf.AvalonDock.dll b/Xceed.Wpf.AvalonDock.dll
new file mode 100644
index 0000000..21b79c3
Binary files /dev/null and b/Xceed.Wpf.AvalonDock.dll differ
diff --git a/Xceed.Wpf.Toolkit.dll b/Xceed.Wpf.Toolkit.dll
new file mode 100644
index 0000000..78557fe
Binary files /dev/null and b/Xceed.Wpf.Toolkit.dll differ
diff --git a/copy.png b/copy.png
new file mode 100644
index 0000000..43e39e6
Binary files /dev/null and b/copy.png differ
diff --git a/key.png b/key.png
new file mode 100644
index 0000000..cd59760
Binary files /dev/null and b/key.png differ
diff --git a/laps.ps1 b/laps.ps1
index a2eb7bf..0463385 100644
--- a/laps.ps1
+++ b/laps.ps1
@@ -1,270 +1,222 @@
-Add-Type -AssemblyName System.Windows.Forms
-Add-Type -AssemblyName System.Drawing
-Add-Type -AssemblyName PresentationCore
+Add-Type -AssemblyName 'PresentationFramework'
+Add-Type -Path 'Xceed.Wpf.Toolkit.dll'
-$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'
+[xml]$loginXaml = get-content -path "LoginScreen.xaml"
+$Reader = New-Object System.Xml.XmlNodeReader $loginXaml
+$loginWindow = [Windows.Markup.XamlReader]::Load($Reader)
+$logo64 = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzFGQkE1MzY0NTBGMTFGMDg2ODk5MkRFODYwNjUwQTciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzFGQkE1Mzc0NTBGMTFGMDg2ODk5MkRFODYwNjUwQTciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozMUZCQTUzNDQ1MEYxMUYwODY4OTkyREU4NjA2NTBBNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozMUZCQTUzNTQ1MEYxMUYwODY4OTkyREU4NjA2NTBBNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtFHR+EAABMUSURBVHjazFt7lBTV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"
+$logoImg = New-Object System.Windows.Media.Imaging.BitmapImage
+$logoImg.BeginInit()
+$logoImg.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($logo64)
+$logoImg.EndInit()
+$logoImg.Freeze()
-$iconBase64 = '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'
-$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage
-$bitmap.BeginInit()
-$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($iconBase64)
-$bitmap.EndInit()
-$bitmap.Freeze()
-$image = [System.Drawing.Bitmap][System.Drawing.Image]::FromStream($bitmap.StreamSource)
-$icon = [System.Drawing.Icon]::FromHandle($image.GetHicon())
-$form.Icon = $icon
+$loginWindow.Icon = $logoImg
-$usernameLabel = New-Object System.Windows.Forms.Label
-$usernameLabel.Location = New-Object System.Drawing.Point(30,20)
-$usernameLabel.Text = 'Identifiant :'
+$errorLabel = $loginWindow.FindName("errorLabel")
+$usernameTextbox = $loginWindow.FindName("UsernameTextbox")
+$usernameHelp = $loginWindow.FindName("UserNameHelp")
+$passwordTextbox = $loginWindow.FindName("PasswordBox")
-$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
+$usernameChanged = {
+ if($usernameTextbox.Text -ne ""){
+ $usernameHelp.Content = ""
+ }else{
+ $usernameHelp.Content = "admin-uid"
+ }
+}
+$usernameTextbox.Add_TextChanged($usernameChanged)
+$global:result = "NOK"
+$global:creds = $null
$ValidateCreds = {
try{
if($usernameTextbox.Text -eq ''){
- $errorLabel.Text = 'Identifiant manquant'
- $errorLabel.ForeColor = 'DarkRed'
- $errorLabel.Visible = $true
+ $errorLabel.Content = 'Identifiant manquant'
+ $errorLabel.Foreground = 'DarkRed'
+ $errorLabel.Visibility = "Visible"
return
}
- if($passwordTextbox.text -eq ''){
- $errorLabel.Text = 'Mot de passe manquant'
- $errorLabel.ForeColor = 'DarkRed'
- $errorLabel.Visible = $true
+ if($passwordTextbox.Password -eq ''){
+ $errorLabel.Content = 'Mot de passe manquant'
+ $errorLabel.Foreground = 'DarkRed'
+ $errorLabel.Visibility = "Visible"
return
}
- $password = ConvertTo-SecureString $passwordTextbox.text -AsPlainText -Force
- $creds = New-Object System.Management.Automation.PsCredential "ac-bureautique\$($usernameTextbox.Text)", $password
+ $password = ConvertTo-SecureString $passwordTextbox.Password -AsPlainText -Force
+ $global:creds = New-Object System.Management.Automation.PsCredential "ac-bureautique\$($usernameTextbox.Text)", $password
Get-LapsADPassword -Identity $env:COMPUTERNAME -Credential $creds
- $form.DialogResult = 'OK'
- $form.Close()
+ $global:result = 'OK'
+ $loginWindow.Close()
}catch{
$exitCode = $_.exception.errorcode
- $errorLabel.Visible = $true
- $errorLabel.ForeColor = 'DarkRed'
+ $errorLabel.Visibility = "Visible"
+ $errorLabel.Foreground = 'DarkRed'
if($exitCode -eq 49){
- $errorLabel.Text = 'Mauvais identifiant/mot de passe'
+ $errorLabel.Content = 'Mauvais identifiant/mot de passe'
}else{
- $errorLabel.Text = $_
+ $errorLabel.Content = $_
}
}
}
-$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
+$validateButton = $loginWindow.FindName("ValidateButton")
+$validateButton.Add_Click($ValidateCreds)
+$loginWindow.ShowDialog() | Out-Null
-$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
+if($global: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()
+#=================== SearchScreen =======================#
-$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'
-$machineForm.Icon = $icon
+#========================================================#
-# 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)
+[xml]$xaml = get-content -path "SearchScreen.xaml"
+$Reader = New-Object System.Xml.XmlNodeReader $xaml
+$window = [Windows.Markup.XamlReader]::Load($Reader)
-# 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
+$window.Icon = $logoImg
-# laps fields
+$searchImg64 = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA6klEQVQ4jZ3SOU4DQRCF4Q/MkmBnGJCQLwImh4OwHMg+AmYOgASEiIwMAiIwYguMiC0BEgRdwTB4xiO/pKRXXX9XdTV/1UWGV3xHzMKv1AL6eMA+NrEY8SD8HhplgD7OsFKSb+I8IP+0g/uK4jxkiO1iIou26+gQg6L5Js1aRx28FM1PLNUELGOcN+bxgbWagHW8FwGX2K0J2MNV0exKe25OKW7hEVuTkj1pz2WQFi4wQnvSgYb0mYbSqjrSw3ZwFDeP8IPbMghpnBM84wtPOI6221E8FVKlVdwE5A4bs0DynVzPzUIIyCnGv28tMicRo6VgAAAAAElFTkSuQmCC"
+$searchImg = New-Object System.Windows.Media.Imaging.BitmapImage
+$searchImg.BeginInit()
+$searchImg.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($searchImg64)
+$searchImg.EndInit()
+$searchImg.Freeze()
-$lapsAccountLabel = New-Object System.Windows.Forms.Label
-$lapsAccountLabel.Location = New-Object System.Drawing.Point(150,100)
-$lapsAccountLabel.Size = New-Object System.Drawing.Size(300,15)
-$lapsAccountLabel.Font = New-Object System.Drawing.Font('Consolas',8)
-$lapsAccountLabel.Text = "Compte LAPS: "
-$lapsAccountLabel.Visible = $false
+$copyImg64 = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAb0lEQVQ4jc2SQQ6AIAwEJzzL6F3i/z8A/AMPGKJtEywH4yScti3ZbUFzAAWog5eBaPSTgcUSBCuQLKG+aO61wVFsEnh6nkJ6dlmwGr7P4H8DCu1IRmy0BajQ4iWMTjkBuzXAhTcD9VlgwrPE7fnOCSzbMvwB7bsKAAAAAElFTkSuQmCC"
+$copyImg = New-Object System.Windows.Media.Imaging.BitmapImage
+$copyImg.BeginInit()
+$copyImg.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($copyImg64)
+$copyImg.EndInit()
+$copyImg.Freeze()
-# 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.Font = New-Object System.Drawing.Font('Consolas',10)
-$lapsPasswordTextbox.ReadOnly = $true
-$lapsPasswordTextbox.Visible = $false
+$copyBtn = $window.FindName("copyBtn")
+$copyBtn.source = $copyImg
+
+$searchBtn = $window.FindName("searchBtn")
+$searchBtn.source = $searchImg
+
+$updateBtn = $window.FindName("updateBtn")
+
+$computerNameTextBox = $window.FindName("computerNameTextbox")
+
+
+$lapsPasswordTextbox = $window.FindName("LAPSTextbox")
+$lapsAccountLabel = $window.FindName("lapsAccountLabel")
+$lapsPasswordLabel = $window.FindName("lapsPasswordLabel")
+$calendarLabel = $window.FindName("expirationLabel")
+$calendar = $window.FindName("expirationTimeSelector")
+$errorText = $window.FindName("errorText")
+
+$showLaps = {
+ if($null -ne $_.Key){
+ if($_.Key -ne 'Return'){
+ return
+ }
+ }else{
+ $searchBtn.Height = 16
+ $searchBtn.Width = 17
+ }
+ $identity = $computerNameTextbox.Text
+ $copyBtn.Visibility = "Hidden"
+ $lapsPasswordTextbox.Visibility = "Hidden"
+ $lapsAccountLabel.Visibility = "Hidden"
+ $lapsPasswordLabel.Visibility = "Hidden"
+ $calendarLabel.Visibility = "Hidden"
+ $calendar.Visibility = "Hidden"
+ $updateBtn.Visibility = "Hidden"
+ $calendar.Minimum = [DateTime]'01/01/1970'
+ try{
+ $laps = Get-LapsADPassword -Identity $identity -DecryptionCredential $global:creds -Credential $global:creds -AsPlainText -ErrorAction Stop
+ $lapsPasswordTextbox.text = $laps.Password
+ $lapsAccountLabel.Content = "Compte LAPS: $($laps.Account)"
+ $errorText.Visibility = "Hidden"
+ $copyBtn.Visibility = "Visible"
+ $calendar.Value = [DateTime]$laps.ExpirationTimestamp
+ $lapsPasswordTextbox.Visibility = "Visible"
+ $lapsAccountLabel.Visibility = "Visible"
+ $lapsPasswordLabel.Visibility = "Visible"
+ $calendarLabel.Visibility = "Visible"
+ $calendar.Visibility = "Visible"
+ $updateBtn.Visibility = "Visible"
+ }catch{
+ switch($_){
+ "Cannot bind argument to parameter 'Identity' because it is an empty string." { $errorText.Text = "Nom d'ordinateur manquant" }
+ "Failed to find the '$($identity)' computer in AD" { $errorText.Text = "Impossible de trouver l'ordinateur $($identity) dans l'AD" }
+ default { $errorText.Text = "$_" }
+ }
+ $lapsPasswordTextbox.text = ''
+ $errorText.Foreground = 'DarkRed'
+ $errorText.Visibility = "Visible"
+ }
+}
+
+$searchMouseEnter = {
+ $searchBtn.Height = 16
+ $searchBtn.Width = 17
+}
+
+$searchMouseLeave = {
+ $searchBtn.Height = 15
+ $searchBtn.Width = 16
+}
+
+$searchBtn.Add_MouseUp($showLaps)
+$computerNameTextBox.Add_KeyDown($showLaps)
+$searchBtn.Add_MouseEnter($searchMouseEnter)
+$searchBtn.Add_MouseLeave($searchMouseLeave)
+$searchBtn.Add_MouseDown($searchMouseLeave)
+
+# copy password
+
+$copyMouseEnter = {
+ $copyBtn.Height = 16
+ $copyBtn.Width = 17
+}
+
+$copyMouseLeave = {
+ $copyBtn.Height = 15
+ $copyBtn.Width = 16
+}
$copyPassword = {
+ $copyBtn.Height = 16
+ $copyBtn.Width = 17
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
+$copyBtn.Add_MouseUp($copyPassword)
+$copyBtn.Add_MouseEnter($copyMouseEnter)
+$copyBtn.Add_MouseLeave($copyMouseLeave)
+$copyBtn.Add_MouseDown($copyMouseLeave)
$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
+ $var = Set-LapsADPasswordExpirationTime -Identity $identity -Credential $global:creds -WhenEffective $effective -ErrorAction Stop
+ $laps = Get-LapsADPassword -Identity $identity -DecryptionCredential $global:creds -Credential $global:creds -AsPlainText -ErrorAction Stop
$lapsPasswordTextbox.text = $laps.Password
- $errorLabel.Visible = $false
+ $errorText.Visibility = "Hidden"
}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 = "$_" }
+ "Cannot bind argument to parameter 'Identity' because it is an empty string." { $errorText.Text = "Nom d'ordinateur manquant" }
+ "Failed to find the '$($identity)' computer in AD" { $errorText.text = "Impossible de trouver l'ordinateur $($identity) dans l'AD" }
+ default { $errorText.Text = "$_" }
}
$lapsPasswordTextbox.text = ''
- $errorLabel.ForeColor = 'DarkRed'
- $errorLabel.Visible = $true
+ $errorText.Foreground = 'DarkRed'
+ $errorText.Visibility = "Visible"
}
}
-# label
+$updateBtn.Add_Click($generateLaps)
-# 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
- $lapsAccountLabel.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
- $lapsAccountLabel.text = "Compte LAPS: $($laps.Account)"
- 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
- $lapsAccountLabel.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($lapsAccountLabel)
-$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
+$window.ShowDialog() | Out-Null
\ No newline at end of file
diff --git a/search.png b/search.png
new file mode 100644
index 0000000..04dba75
Binary files /dev/null and b/search.png differ