簡體   English   中英

防止 Powershell GUI 關閉

[英]Prevent Powershell GUI from closing

我想阻止我的 Powershell 表單在按下提交按鈕后關閉。 在 function "search_PC" 之后沒有更多代碼並且表單關閉。 我希望在 function 完成后仍然能夠在那里寫東西。 我已經嘗試過暫停 function 和 while($true) 循環。 我會很高興得到答案。

Import-Module ActiveDirectory

# Assembly for GUI
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

# Create Form
$objForm = New-Object System.Windows.Forms.Form
$objForm.Size = New-Object System.Drawing.Size(400,500)
$objForm.Backcolor="white"
$objForm.StartPosition = "CenterScreen"
$objForm.Text = "Example Software"
$objForm.Icon="C:\Users\...\icon.ico"

# Label
$objLabel1 = New-Object System.Windows.Forms.Label
$objLabel1.Location = New-Object System.Drawing.Size(80,30)
$objLabel1.Size = New-Object System.Drawing.Size(60,20)
$objLabel1.Text = "UserID:"
$objForm.Controls.Add($objLabel1)

# Textbox
$objTextBox1 = New-Object System.Windows.Forms.TextBox
$objTextBox1.Location = New-Object System.Drawing.Size(160,28)
$objTextBox1.Size = New-Object System.Drawing.Size(100,20)
$objForm.Controls.Add($objTextBox1)

# Label
$objLabel2 = New-Object System.Windows.Forms.Label
$objLabel2.Location = New-Object System.Drawing.Size(80,72)
$objLabel2.Size = New-Object System.Drawing.Size(80,20)
$objLabel2.Text = "PC-Name:"
$objForm.Controls.Add($objLabel2)

# Textbox
$objTextBox2 = New-Object System.Windows.Forms.TextBox
$objTextBox2.Location = New-Object System.Drawing.Size(160,70)
$objTextBox2.Size = New-Object System.Drawing.Size(100,20)
$objForm.Controls.Add($objTextBox2)

# Button for closing
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(100,220)
$CancelButton.Size = New-Object System.Drawing.Size(163,25)
$CancelButton.Text = "Exit"
$CancelButton.Name = "Exit"
$CancelButton.DialogResult = "Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

# Checkbox
$objTypeCheckbox1 = New-Object System.Windows.Forms.Checkbox 
$objTypeCheckbox1.Location = New-Object System.Drawing.Size(80,120) 
$objTypeCheckbox1.Size = New-Object System.Drawing.Size(500,20)
$objTypeCheckbox1.Text = "Internal Session Support"
$objTypeCheckbox1.TabIndex = 1
$objTypeCheckbox1.Add_Click({$objTypeCheckbox2.Checked = $false})
$objForm.Controls.Add($objTypeCheckbox1)

  # Checkbox
$objTypeCheckbox2 = New-Object System.Windows.Forms.Checkbox 
$objTypeCheckbox2.Location = New-Object System.Drawing.Size(80,140) 
$objTypeCheckbox2.Size = New-Object System.Drawing.Size(500,20)
$objTypeCheckbox2.Text = "Session Support Internal & external"
$objTypeCheckbox2.TabIndex = 2
$objTypeCheckbox2.Add_Click({$objTypeCheckbox1.Checked = $false})
$objForm.Controls.Add($objTypeCheckbox2)

# Button fo checking the User Input
$SubmitButton = New-Object System.Windows.Forms.Button
$SubmitButton.Location = New-Object System.Drawing.Size(100,190)
$SubmitButton.Size = New-Object System.Drawing.Size(163,25)
$SubmitButton.Text = "Submit"
$SubmitButton.Name = "Submit"
$SubmitButton.DialogResult = "OK"
$objForm.AcceptButton = $SubmitButton

$SubmitButton.Add_Click({ 
$User = $objTextBox1.Text
$PC = $objTextBox2.Text

# Check if all User Inputs are filled out
if ( !($User.trim()) -or !($PC.trim()) ) { 
   [void] [Windows.Forms.MessageBox]::Show("Please fill out every value!", "Error", [Windows.Forms.MessageBoxButtons]::ok, [Windows.Forms.MessageBoxIcon]::Warning)}

if($objTypeCheckbox1.checked -eq $true) {$Software = "Internal"}
elseif($objTypeCheckbox2.checked -eq $true) {$Software = "Internal&External"}
else {[void] [Windows.Forms.MessageBox]::Show("Please fill out every value!", "Error", [Windows.Forms.MessageBoxButtons]::ok, [Windows.Forms.MessageBoxIcon]::Warning)}

search_user
})
$objForm.Controls.Add($SubmitButton)

$statusBar1 = New-Object System.Windows.Forms.StatusBar
$objForm.controls.add($statusBar1)

function createFile
{
$Date = Get-Date -Format d.M.yyyy
$Time = (Get-Date).ToString(„HH:mm:ss“)
$Time2 = (Get-Date).ToString(„HH-mm-ss“)
$Date2 = Get-Date -Format yyyy-M-d;
$FileName = $Time2 + " " + $Date2

$wrapper = New-Object PSObject -Property @{ 1 = $Date; 2 = $Time; 3 = $User; 4 = $PC; 5 = $Software }
Export-Csv -InputObject $wrapper -Path C:\Users\...\$FileName.csv -NoTypeInformation
[void] [Windows.Forms.MessageBox]::Show("Successful!")
}

function search_user
{
if (@(Get-ADUser -Filter {SamAccountName -eq $User}).Count -eq 0) {
    $objTextBox1.BackColor = "Red";
    $statusBar1.Text = "Couldn't find user!"
    $objForm.Dispose()
}
else{$objTextBox1.BackColor = "Green"
search_PC}
}

function search_PC
{
$Client = $PC
if (@(Get-ADComputer -Filter {DNSHostName -eq $Client}).Count -eq 0) {
    $objTextBox2.BackColor = "Red";
    $statusBar1.Text = "Couldn't find PC!"
    $objForm.Dispose()
}
else{$objTextBox2.BackColor = "Green"
createFile}
}

$objForm.ShowDialog() #Showing Form and elements

表格截圖:

表格截圖

這條線是你的問題:

$SubmitButton.DialogResult = "OK"

它應該是:

$SubmitButton.DialogResult = [System.Windows.Forms.DialogResult]::None

或者只是被刪除。

DialogResult

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM