PowerShell Winforms обновляет текстовые поля на других входных данных, но перезаписать - PullRequest
0 голосов
/ 03 мая 2018

днем ​​все,

Я хочу верить, что это довольно легко, но ударить стену, и не могу понять, почему. У меня есть winform PowerShell, который собирается создать новую учетную запись пользователя из шаблона. Одним из полей, над которым я сейчас работаю, является линейный менеджер; После того, как шаблонная учетная запись найдена, автоматически заполните поле линейного менеджера, но разрешите его перезаписать, если это неверно.
Для предварительно заполненного материала, который я использовал:

$FORMCONTROL.Add_TextChanged( {

Однако, как только шаблон был найден и поле линейного менеджера тоже написано, я не могу его перезаписать. Есть ли другое событие, которое я должен использовать, чтобы заполнить поле, но разрешить мне удалить содержимое и добавить что-то еще?

Приведенный ниже код является сильно урезанной версией того, что я использую. Функции позволяют найти учетную запись пользователя и заполнить поле ReadOnly.

Function FindUser {
  IF ( $SEARCHUSER -like $NULL -or $SEARCHUSER -like " *" )
     { } 
  ELSEIF ( $ACCOUNT = dsquery user -samid $SEARCHUSER )
     { $ACCOUNT     = Get-ADUser $SEARCHUSER -Property * }
  ELSEIF ( $ACCOUNT = Get-ADUser -Filter { mail -eq $SEARCHUSER } -ea sil )
     { $ACCOUNT     = Get-ADUser -Filter { mail -eq $SEARCHUSER } -Property * }
  ELSEIF ( dsquery user -name $SEARCHUSER )
     { $ACCOUNT     = Get-ADUser -Filter { name -eq $SEARCHUSER } -Property * }
  ELSE
     { $( foreach ( $SEARCHUSER in ( Get-ADUser -Filter { ( Surname -like $SEARCHUSER ) -and ( Enabled -eq $TRUE ) 
                    } -Properties Mail, Department, Office | sort Name ) )
                  { $SEARCHUSER | Select Name, @{ N = "Username" ; E = { $_.SamAccountName } }, Mail, Department, Office
                  } ) | Out-GridView -Title 'Select the user account' -OutputMode Single | %{
          TRY
              { $ACCOUNT = Get-ADUser $_.UserName -Property * }
          CATCH
              { } } }

  IF ( ( $ACCOUNT.SamAccountName ).count -eq 1 )
     { $Script:ACCOUNT = $ACCOUNT }
  ELSE
     { $Script:ACCOUNT = $NULL } }


Function TemplateUser {
  IF ( $ACCOUNT -ne $NULL )
     { $TAB1TEMPLATE_5.Text = ( $ACCOUNT.Name ) }

  ELSEIF ( $TAB1TEMPLATE_3.Text.Length -lt 4 )
     { $TAB1TEMPLATE_5.Text = $NULL  } }


# Creates the parent form and controls
$SDC                       = New-Object System.Windows.Forms.Form
$SDC.Location              = New-Object System.Drawing.Size( 270,175 )
$SDC.Size                  = New-Object System.Drawing.Size( 900,600 )
$SDC.StartPosition         = "CenterScreen"
$SDC.BackColor             = "Lavender"
$SDC.Font                  = "Calibri, 8.5"
$SDC.FormBorderStyle       = "Fixed3D"


#Tab 1 Template Account Label
$TAB1TEMPLATE_2            = New-Object System.Windows.Forms.Label
$TAB1TEMPLATE_2.Location   = '35,90'
$TAB1TEMPLATE_2.Size       = '200,20'
$TAB1TEMPLATE_2.Font       = New-Object System.Drawing.Font( "Calibri",10,[System.Drawing.FontStyle]::Bold ) 
$TAB1TEMPLATE_2.Text       = "Who are we using as a template?"
$SDC.Controls.Add( $TAB1TEMPLATE_2 )

#Tab 1 Template Textbox
$TAB1TEMPLATE_3            = New-Object System.Windows.Forms.TextBox
$TAB1TEMPLATE_3.Location   = '20,115'
$TAB1TEMPLATE_3.Size       = '200,20'
$TAB1TEMPLATE_3.Font       = New-Object System.Drawing.Font( "Calibri",9 )
$SDC.Controls.Add( $TAB1TEMPLATE_3 )

#Tab 1 Template Textbox - When hit Return
$TAB1TEMPLATE_3.Add_KeyDown( { 
    IF ( $_.KeyCode -eq 'Enter' )
       { $SEARCHUSER = $TAB1TEMPLATE_3.Text ; FindUser ; TemplateUser } } )

#Tab 1 Template Account's Full Name
$TAB1TEMPLATE_5            = New-Object System.Windows.Forms.TextBox
$TAB1TEMPLATE_5.Location   = '20,150'
$TAB1TEMPLATE_5.Size       = '200,20'
$TAB1TEMPLATE_5.ReadOnly   = $TRUE
$TAB1TEMPLATE_5.Font       = New-Object System.Drawing.Font( "Calibri",9 )
$SDC.Controls.Add( $TAB1TEMPLATE_5 )



#Tab 1 Line Manager Label
$TAB1MANAGER_2             = New-Object System.Windows.Forms.Label
$TAB1MANAGER_2.Location    = '35,400'
$TAB1MANAGER_2.Name        = "Manager"
$TAB1MANAGER_2.Size        = '245,20'
$TAB1MANAGER_2.Font        = New-Object System.Drawing.Font( "Calibri",10,[System.Drawing.FontStyle]::Bold ) 
$TAB1MANAGER_2.Text        = "Line Manager"
$SDC.Controls.Add( $TAB1MANAGER_2 )

#Tab 1 Line Manager Textbox
$TAB1MANAGER_3             = New-Object System.Windows.Forms.TextBox
$TAB1MANAGER_3.Location    = '20,420'
$TAB1MANAGER_3.Size        = '245,20'
$TAB1MANAGER_3.Name        = "Manager"
$TAB1MANAGER_3.Font        = New-Object System.Drawing.Font( "Calibri",9 ) 
$SDC.Controls.Add( $TAB1MANAGER_3 )
$TAB1MANAGER_3.Text        = $( If ( $TAB1TEMPLATE_3.text -eq $NULL ) { "hi" } )

$SDC.ShowDialog()

1 Ответ

0 голосов
/ 04 мая 2018

Я, кажется, исправил это, отредактировав Function TemplateUser:

Function TemplateUser {
  IF ( $ACCOUNT -ne $NULL )
     { $TAB1TEMPLATE_5.Text = ( $ACCOUNT.Name )
       $TAB1MANAGER_3.Text  = ( Get-ADUser $ACCOUNT.Manager ).Name
        }

  ELSEIF ( $TAB1TEMPLATE_3.Text.Length -lt 4 )
     { $TAB1TEMPLATE_5.Text = $NULL  } }

Господь знает, что я делал неправильно в первую очередь, так как не сохранил изменения.

@ TheIncorrigible1 - Любопытно узнать, что вы подразумеваете под форматированием. Подлинно. Есть ли более эффективный способ написания? Я знаю, что после завершения этот скрипт станет довольно большим, поэтому, если я использую ненужный код, у меня все уши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...