powershell - 我的表单上的 OK 按钮在第一次启动时不显示,如果我重新启动它会显示
问题描述
我有一个创建表单的脚本,并且每次运行脚本时都应该让 OK 按钮变灰,但是,我必须运行脚本两次才能显示 OK。不知道发生了什么。 缺少确定按钮
可变面积Import-Module (Join-Path $(Split-Path $env:SMS_ADMIN_UI_PATH) ConfigurationManager.psd1)
Import-Module ActiveDirectory
文件名设置-OSDComputerNamePrompt-TST.ps1
# Below is one of the Array's I'm adding
$ADSites=@("S01","S02","S03")
# Import-Module ActiveDirectory
# $ADSites = (Get-ADReplicationSite -filter *).Name
我无法让 Get-ADReplicationSite 在 WinPE 中工作
$ADSiteS01=@("AAA","BBB","CCC")
$ADSiteS02=@("DDD","EEE","FFF")
$ADSiteS03=@("GGG","HHH","JJJ")
创建表格
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(425,250)
$Form.MinimumSize = New-Object System.Drawing.Size(425,250)
$Form.MaximumSize = New-Object System.Drawing.Size(425,250)
$Form.StartPosition = "CenterScreen"
$Form.SizeGripStyle = "Hide"
$Form.FormBorderStyle = "FixedToolWindow"
$Form.Text = "Just a Form"
$Form.TopMost = $true
创建组合框
$Combobox1 = New-Object System.Windows.Forms.Combobox
$Combobox1.Location = '26,25'
$Combobox1.Size = '105,20'
$Combobox1.items.AddRange($ADSites)
$combobox2 = New-Object System.Windows.Forms.Combobox
$combobox2.Location = '143,25'
$combobox2.Size = '105,20'
$Form.Controls.Add($combobox1)
$Form.Controls.Add($combobox2)
创建文本框
$textBoxFPS = New-Object System.Windows.Forms.TextBox
$textBoxFPS.Location = '26,75'
$textBoxFPS.Size = '55,20'
$textBoxFPS.Text = 'Test'
$form.Controls.Add($textBoxFPS)
控制可以在文本框中输入的内容
$textBoxFPS.MaxLength = 6
$textBoxFPS.Add_TextChanged({
$this.text = $this.Text -replace '\D'})
$form.Controls.Add($textBoxFPS)
为组合框添加标签
$lbADSub = New-Object System.Windows.Forms.Label
$lbADSub.Text = "Select AD Site"
$lbADSub.Top = 5
$lbADSub.Left = 26
$lbADSub.Autosize = $true
$form.Controls.Add($lbADSub)
$lbDeptSub = New-Object System.Windows.Forms.Label
$lbDeptSub.Text = "Select Department"
$lbDeptSub.Top = 5
$lbDeptSub.Left = 143
$lbDeptSub.Autosize = $true
$form.Controls.Add($lbDeptSub)
$lbFPSSub = New-Object System.Windows.Forms.Label
$lbFPSSub.Text = "Asset Tag (Only Numbers Allowed)"
$lbFPSSub.Top = 55
$lbFPSSub.Left = 26
$lbFPSSub.Autosize = $true
$form.Controls.Add($lbFPSSub)
复选框
$chkThis = New-Object Windows.Forms.checkbox
$chkThis.Text = "Verify New Computer Name"
$chkThis.Left = 26
$chkThis.Top = 105
$chkThis.AutoSize = $true
$chkThis.Checked = $false
$form.Controls.Add($chkThis)
选择标签
$labelClub = New-Object System.Windows.Forms.Label
$labelClub.Location = '20,130'
$labelClub.Size = '280,20'
$labelClub.Text = "-"
$form.Controls.Add($labelClub)
创建确定和取消按钮
$buttonPanel = New-Object Windows.Forms.Panel
$buttonPanel.Size = New-Object Drawing.Size @(400,40)
$buttonPanel.Dock = "Bottom"
创建确定按钮
$okButton = New-Object Windows.Forms.Button
$okButton.Top = $cancelButton.Top
$okButton.Left = $cancelButton.Left - $okButton.Width - 5
$okButton.Text = "Ok"
$okButton.DialogResult = "Ok"
$okButton.Anchor = "Left"
$okButton.Enabled = $false
创建取消按钮
$cancelButton = New-Object Windows.Forms.Button
$cancelButton.Left = $buttonPanel.Height - $cancelButton.Height - 10
$cancelButton.Left = $buttonPanel.Width - $cancelButton.Width - 10
$cancelButton.Text = "Cancel"
$cancelButton.DialogResult = "Cancel"
$cancelButton.Anchor = "Right"
将按钮添加到按钮面板
$buttonPanel.Controls.Add($okButton)
$buttonPanel.Controls.Add($cancelButton)
将按钮面板添加到表单
$form.Controls.Add($buttonPanel)
设置按钮的默认操作
$form.AcceptButton = $okButton
$form.CancelButton = $cancelButton
现在我们在 Combobox 1 更改时填充 Combobox 2
$ComboBox1.add_SelectedIndexChanged({
$ComboBox2.Items.Clear()
$combobox2.Text = $null
Switch ($ComboBox1.Text) {
"S01"{
$ADSiteS01 | ForEach {
$combobox2.Items.Add($_)
}}
"S02"{
$ADSiteS02 | ForEach {
$combobox2.Items.Add($_)
}}
"S03"{
$ADSiteS03 | ForEach {
$combobox2.Items.Add($_)
}}}
$labelClub.Text = $combobox1.Text + "-" + $combobox2.Text + "-" + $textBoxFPS.Text
})
$ComboBox2.add_SelectedIndexChanged({
$labelClub.Text = $combobox1.Text + "-" + $combobox2.Text + "-" + $textBoxFPS.Text
})
$textBoxFPS.add_TextChanged({
$labelClub.Text = $combobox1.Text + "-" + $combobox2.Text + "-" + $textBoxFPS.Text
})
当复选框的状态改变时做一些事情
$chkThis.Add_CheckStateChanged({
If ($chkThis.Checked) {
$okButton.enabled = $true
}
Else {
$okButton.enabled = $true
}})
$Form.ShowDialog()
解决方案
根据 Theo 和我上面的评论,请添加Set-StrictMode -Version Latest
到脚本的顶部。
看看原因:
$v1 = 2 + $v2
$v1
Set-StrictMode -Version Latest
$v1 = 2 + $v2
$v1
这可能无法完全解决您的问题,但如果您的代码使用未初始化的变量(如果您以特定顺序运行代码段),则会出现错误(并有助于避免陷入其他问题,请参阅https://docs.microsoft.com /en-us/powershell/module/microsoft.powershell.core/set-strictmode?view=powershell-6)。
推荐阅读
- spring-boot - 不检查请求头参数
- asp.net-mvc - Azure B2C 身份验证在本地重定向,但在 Azure 上托管时不会
- android - 无法更改按钮的背景颜色
- react-native - ExpoKit33 或 React-native 中的 Expo SDK 33 更新错误
- c# - EF Core 无法翻译简单的 where linq 表达式
- java - OkHttp 拦截器为空
- javascript - Highchart 极坐标图 - 4 个不同系列的嵌套圆
- mapbox - 加载WMS服务,url太长无法获取数据
- c# - 如果删除表中的一行,找出将被删除的行数(级联)
- docker - 如何访问已被另一个 Docker 容器使用的端口