【问题标题】:Creating a powershell GUI that calls seperate powershell scripts创建一个调用单独的 powershell 脚本的 powershell GUI
【发布时间】:2017-11-30 12:02:52
【问题描述】:

有人能指出我正确的方向吗?我想创建一个打开带有复选框和字段的模块的 powershell 脚本。

假设我有想要在服务器上运行的单独的 powershell 脚本。我希望能够将它们全部放在窗口中,并能够根据需要打开和关闭它们(使用复选框)。这是我想要制作的一些代码和 GUI 的示例。

因此每个复选框都会将相应的代码添加到要运行的列表中。我应该能够获得 GUI 设置。它的运行按钮,让复选框调用脚本和我不太确定的变量字段。

Screenshot

这是我正在使用的代码

#This creates the form and sets its size and position
$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Server Setup / Install Roles"
$objForm.Size = New-Object System.Drawing.Size(800,800) 

#This creates a checkbox called Set Remote Execution to: unrestricted
$objSet_RECheckbox = New-Object System.Windows.Forms.Checkbox 
$objSet_RECheckbox.Location = New-Object System.Drawing.Size(10,10) 
$objSet_RECheckbox.Size = New-Object System.Drawing.Size(500,20)
$objSet_RECheckbox.Text = "Set Remote Execution to: unrestricted"
$objSet_RECheckbox.TabIndex = 1
$objForm.Controls.Add($objSet_RECheckbox)

#This creates a checkbox called Change time zone
$objTimeCheckbox = New-Object System.Windows.Forms.Checkbox 
$objTimeCheckbox.Location = New-Object System.Drawing.Size(10,30) 
$objTimeCheckbox.Size = New-Object System.Drawing.Size(500,20)
$objTimeCheckbox.Text = "Change time zone"
$objTimeCheckbox.TabIndex = 2
$objForm.Controls.Add($objTimeCheckbox)

#This creates a checkbox called Install DNS Role
$objDNSCheckbox = New-Object System.Windows.Forms.Checkbox 
$objDNSCheckbox.Location = New-Object System.Drawing.Size(10,50) 
$objDNSCheckbox.Size = New-Object System.Drawing.Size(500,20)
$objDNSCheckbox.Text = "Install DNS Role"
$objDNSCheckbox.TabIndex = 3
$objForm.Controls.Add($objDNSCheckbox)

#This creates a checkbox called Install DHCP Role
$objDHCPCheckbox = New-Object System.Windows.Forms.Checkbox 
$objDHCPCheckbox.Location = New-Object System.Drawing.Size(10,70) 
$objDHCPCheckbox.Size = New-Object System.Drawing.Size(500,20)
$objDHCPCheckbox.Text = "Install DHCP Role"
$objDHCPCheckbox.TabIndex = 4
$objForm.Controls.Add($objDHCPCheckbox)

#This creates a checkbox called Install Print Role
$objPrintCheckbox = New-Object System.Windows.Forms.Checkbox 
$objPrintCheckbox.Location = New-Object System.Drawing.Size(10,90) 
$objPrintCheckbox.Size = New-Object System.Drawing.Size(500,20)
$objPrintCheckbox.Text = "Install Print Role"
$objPrintCheckbox.TabIndex = 5
$objForm.Controls.Add($objPrintCheckbox)

#This creates a checkbox called Install AD and DC promo
$objAD_NewCheckbox = New-Object System.Windows.Forms.Checkbox 
$objAD_NewCheckbox.Location = New-Object System.Drawing.Size(10,110) 
$objAD_NewCheckbox.Size = New-Object System.Drawing.Size(500,20)
$objAD_NewCheckbox.Text = "Install AD and DC promo"
$objAD_NewCheckbox.TabIndex = 6
$objForm.Controls.Add($objAD_NewCheckbox)

#This creates a label for the DomainMode TextBox1
$objLabel1 = New-Object System.Windows.Forms.Label
$objLabel1.Location = New-Object System.Drawing.Size(10,140) 
$objLabel1.Size = New-Object System.Drawing.Size(280,20) 
$objLabel1.Text = "Domain Mode"
$objForm.Controls.Add($objLabel1) 

#This creates the DomainMode TextBox1
$objTextBox1 = New-Object System.Windows.Forms.TextBox 
$objTextBox1.Location = New-Object System.Drawing.Size(10,160) 
$objTextBox1.Size = New-Object System.Drawing.Size(100,20)
$objTextBox1.TabIndex = 0 
$objForm.Controls.Add($objTextBox1)

#This creates the RUN button and sets the event
$RUNButton = New-Object System.Windows.Forms.Button
$RUNButton.Location = New-Object System.Drawing.Size(10,190)
$RUNButton.Size = New-Object System.Drawing.Size(75,23)
$RUNButton.Text = "RUN"
$RUNButton.Add_Click({$objForm.Close()})
$RUNButton.TabIndex = 9
$objForm.Controls.Add($RUNButton)


$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()

【问题讨论】:

标签: powershell server installation


【解决方案1】:

我想你已经回答了所有的问题。

在您所指的其他代码中,按钮有一个事件处理程序。该代码块中的任何内容都会在您按下按钮时执行。

在代码块中,代码正在查找已使用if 循环选中的复选框。您需要做的就是从正确的if 循环中调用您想要的脚本。除了外部脚本文件,您还可以调用scriptblocks,我认为这是一种更简洁的方式。

$handler_button1_Click= 
{
    $listBox1.Items.Clear();    

    if ($checkBox1.Checked)    {  "C:\MyScript\Script1.ps1" }

    if ($checkBox2.Checked)    {  "C:\MyScript\Script2.ps1" }

    if ($checkBox3.Checked)    {  "C:\MyScript\Script3.ps1" }
}

如果您想对脚本执行后的结果做更多​​的事情,您也可以将它放在if 块中。

如果您想参考,我已经在 GUI 中编写了一个使用复选框的工具:Windows Patching Assistant

【讨论】:

  • 我已经添加了我想在原始帖子中使用的代码。你发布的这个方法,我将如何实现它来调用每个powershell脚本?我也会看看你的脚本,看看它是如何工作的。泰。
  • 我发布的是“运行”按钮的事件处理程序。在您的代码中,您只创建了“运行”按钮。您需要为“运行”按钮创建一个事件处理程序并在其中使用此方法。如果您仔细观察,根据选中的框,我正在调用 3 个不同的 ps1 脚本文件。您可以从正在使用的 GUI 构建工具创建事件处理程序。
  • 如果您引用我的代码,请查看第 1354 行。您将看到一个按钮单击事件处理程序,$buttonStartJob_Click 后跟一个正文。当你点击按钮时,无论你需要发生什么,都在这里。在您的情况下,这将是我在上面发布的内容,即验证复选框并调用适当的外部脚本文件的代码。
  • 好的,我越看越有办法将它附加到一个 powershell 脚本中。我想在整个事情上而不是每个脚本上运行日志。我需要添加大约 30 个复选标记。感谢您的输入,我稍后再看。
  • 好吧。但要区分不同的复选框项操作,您需要使用类似switch 的语句。 technet.microsoft.com/en-us/library/ff730937.aspx
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多