Пустая запись в форме - не принимайте, продолжайте - powershell - PullRequest
0 голосов
/ 23 июня 2018

Мой скрипт проверяет AD для пользователя, введенного в форму. Принимает, если найден, отклоняет и снова спрашивает, если нет. Я обнаружил, что если поле пустое, оно будет обрабатываться. Я создал новую опцию, чтобы не принимать, если .length -eq 0, а затем запросить еще раз. Он продолжает обрабатывать сценарий и снова запрашивает, что учетная запись пользователя не найдена в AD. Мне нужно, чтобы скрипт не выдавал второе приглашение, а скорее попросил новую запись.

function CreateXLS {

function ProcessOut ($x , $group) {
            $result = @()

            Foreach ($Line in $x){
                            $GroupName = "domain.local\" + $group
                            $OutList = New-Object System.Object
                            $OutList | Add-Member -type NoteProperty -Name "DisplayPath_GroupName" -value $GroupName
                            $OutList | Add-Member -type NoteProperty -Name "RuleName" -value "AutomaticApproval"

                            $result+= $OutList

  }
            #Output to XLS
            $outputfilepath = 'c:\users\admin\desktop\'
            $outputfilename = $outputfilepath + 'bulkupload.csv'
          $result | export-csv $outputfilename  -Append -encoding unicode -NoTypeInformation

  } 


 function PromptInput {
            add-Type -AssemblyName System.Windows.Forms
            Add-Type -AssemblyName System.Drawing



            $form = New-Object System.Windows.Forms.Form
            $form.Text = 'Group Auto-Approval Setup'
            $form.Size = New-Object System.Drawing.Size(500,230)
            $form.StartPosition = 'CenterScreen'

            $OKButton = New-Object System.Windows.Forms.Button
            $OKButton.Location = New-Object System.Drawing.Point(170,100)
            $OKButton.Size = New-Object System.Drawing.Size(75,23)
            $OKButton.Text = 'OK'
            $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
            $form.AcceptButton = $OKButton
            $form.Controls.Add($OKButton)

            $CancelButton = New-Object System.Windows.Forms.Button
            $CancelButton.Location = New-Object System.Drawing.Point(260,100)
            $CancelButton.Size = New-Object System.Drawing.Size(75,23)
            $CancelButton.Text = 'Cancel'
            $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
            $form.CancelButton = $CancelButton    
            $form.Controls.Add($CancelButton) 




            $label = New-Object System.Windows.Forms.Label
            $label.Location = New-Object System.Drawing.Point(200,40)
            $label.Size = New-Object System.Drawing.Size(280,20)
            $label.Text = "Enter a group name:"
            $form.Controls.Add($label)

            $textBox = New-Object System.Windows.Forms.TextBox
            $textBox.Location = New-Object System.Drawing.Point(100,65)
            $textBox.Size = New-Object System.Drawing.Size(300,120)
            $form.Controls.Add($textBox)

            $form.Topmost = $true

            $form.Add_Shown({$textBox.Select()})
            $result = $form.ShowDialog()


      #Message box results: blank, found group, group doesn't exist.
           if($textbox.text -eq 0){[System.Windows.Forms.MessageBox]::OK("Entry Cannot Be Blank, Continue?") , "Status" , 4)

           if ($result -eq 'Cancel'){
                            Exit
            }

            if ($result -eq [System.Windows.Forms.DialogResult]::OK){
                            $x = $textBox.Text
            }



            return $x


}






Add-Type -AssemblyName microsoft.visualbasic
$continue = $true
while($continue){
            $input = PromptInput


            $searcher = [ADSISearcher]"(SAMAccountName=$input)"
            $result = $searcher.FindOne()



            if($result){
                            ProcessOut $result $input
                            $additional = [System.Windows.Forms.MessageBox]::Show("Would you like to enter another group?" , "Status" , 4)
                            if ($additional -eq "NO"){
                                             createxls}
                            }}

1 Ответ

0 голосов
/ 24 июня 2018

В области $textbox.text -eq 0 я заметил несколько проблем. Проверка для $textbox.text -eq 0 просматривает текстовое содержимое вместо длины. Нет статического метода [System.Windows.Forms.MessageBox]::OK(.... Предполагая, что это должно быть [System.Windows.Forms.MessageBox]::Show(..., синтаксис немного отклонен. } отсутствует в конце блока if.

В основной части скрипта вы используете $input для одной из ваших переменных. Это автоматическая переменная, и вам следует избегать ее использования в качестве одной из ваших переменных (см. ссылка ). continue является зарезервированным словом , поэтому вы можете не использовать его в качестве имени переменной. Вы также, похоже, имеете здесь непрерывный цикл, даже после создания выходных данных.

Замена нижней части вашего кода этим фрагментом должна делать то, что вы хотите. Он зацикливается на вводе пользователем до тех пор, пока не отменится или не решит продолжить. Это главное изменение. Обратите внимание, что ShowDialog() перемещается внутри этого цикла. Также обратите внимание на изменение имени переменной и добавление $continue = $false в основную часть вашего скрипта.

    # The rest of your script above stays the same

    $form.Add_Shown({$textBox.Select()})
    #$result = $form.ShowDialog() # Moved to inside do..while $promptAgain loop

    #Message box results: blank, found group, group doesn't exist.
    $promptAgain = 'Yes'
    do {
        if ($promptAgain -eq 'Yes') {
            $result = $form.ShowDialog()
            $promptAgain = 'No'
        }
        if ($result -eq 'Cancel'){
            Exit
        }
        if ($textbox.text.Length -eq 0) {
            $promptAgain = [System.Windows.Forms.MessageBox]::Show("Entry Cannot Be Blank, Continue?" , "Status" , 4)
            if ($promptAgain -eq 'No'){
                Exit
            }
        }
    } while ($promptAgain -eq 'Yes')
    if ($result -eq [System.Windows.Forms.DialogResult]::OK){
        $x = $textBox.Text
    }
    return $x
} # function PromptInput

Add-Type -AssemblyName microsoft.visualbasic
$continue = $true
while($continue) {
    $userInput = PromptInput

    $searcher = [ADSISearcher]"(SAMAccountName=$userInput)"
    $result = $searcher.FindOne()

    if($result){
        ProcessOut $result $userInput
        $additional = [System.Windows.Forms.MessageBox]::Show("Would you like to enter another group?" , "Status" , 4)
        if ($additional -eq "NO"){
            createxls
            $continue = $false # added to be able to exit while($continue)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...