powershell:使用一个下拉框中的选项作为另一个下拉框中的变量

dy1byipe  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(422)

我需要得到作为变量存储的第一个下拉框的结果,并用它代替第二个下拉框中的示例名称。
基本上,第二个框中的select查询需要针对slq\u示例中的主数据库运行,一旦做出选择,第一个下拉框就会生成这个slq\u示例。
我试过几种不同的方法,但似乎都做不好。有什么建议吗?
提前谢谢!

  1. # first DROPDOWN Box
  2. $label = New-Object System.Windows.Forms.Label
  3. $label.Location = New-Object System.Drawing.Point(10,20)
  4. $label.Size = New-Object System.Drawing.Size(280,20)
  5. $label.Text = 'SQL Server Name'
  6. $form.Controls.Add($label)
  7. $DropDownBox = New-Object System.Windows.Forms.ComboBox
  8. $DropDownBox.Location = New-Object System.Drawing.Size(10,40)
  9. $DropDownBox.Size = New-Object System.Drawing.Size(260,20)
  10. $DropDownBox.DropDownHeight = 200
  11. $Form.Controls.Add($DropDownBox)
  12. $wksList= invoke-sqlcmd -query "select * from VIEW_NAME
  13. order by instance_name" -database DATABASE_NAME -serverinstance INSTANCE_NAME
  14. foreach ($wks in $wksList) {
  15. $DropDownBox.Items.Add($wks.Instance_Name)
  16. } #end foreach
  17. # end first DROPDOWN box
  18. # second DROPDOWN Box
  19. $label2 = New-Object System.Windows.Forms.Label
  20. $label2.Location = New-Object System.Drawing.Point(10,90)
  21. $label2.Size = New-Object System.Drawing.Size(280,20)
  22. $label2.Text = 'Database Name'
  23. $form.Controls.Add($label2)
  24. $DropDownBox2 = New-Object System.Windows.Forms.ComboBox
  25. $DropDownBox2.Location = New-Object System.Drawing.Size(10,110)
  26. $DropDownBox2.Size = New-Object System.Drawing.Size(260,20)
  27. $DropDownBox2.DropDownHeight = 200
  28. $Form.Controls.Add($DropDownBox2)
  29. $wksList2= invoke-sqlcmd -query "select name from sys.databases
  30. where database_id>4
  31. order by name" -database MASTER -serverinstance INSTANCE_NAME
  32. foreach ($wks in $wksList2) {
  33. $DropDownBox2.Items.Add($wks.name)
  34. } #end foreach
  35. # end second DROPDOWN box

试图在下面发布当前代码….把编辑搞砸了:-(,包括jonathan建议的更改。。。将不得不开始新的职位…..抱歉!!!!!!!!!!!!
正如我在给jonathan的评论中提到的,这似乎是对的,但是传递给-serverinstance的任何值似乎都不起作用。它“尝试”连接,但powershell生成一个错误,说明它无法连接到服务器。
附加说明-通过添加get variable命令,我确定传递给instancename的值实际上是空的。
99.9%。。。有什么想法吗?再次提前感谢。
通过将$instancename=$dropdownbox.selecteditem命令移动到第二个下拉框下,流程的aprt现在似乎可以正常工作。我从第一个下拉列表中选择一个服务器,单击按钮,然后将正确的数据库列表填充到第二个下拉列表中。
但是,现在进程底部的$dbname=$dropdownbox2.text语句失败,为db name提供了一个空值。因此,没有备份。
还在玩变奏曲,但如果有人看到我错过了什么,告诉我。
我假设我需要添加第二个按钮并单击action,以将box 2的结果设置为db变量,但是我在放置方面遇到了问题。
是的,…代码输入正确。。。。
这是一个似乎可行的版本,除了将第二个组合框中的值向下传递到底部的$dbname。。。。。

  1. Add-Type -AssemblyName System.Windows.Forms
  2. Add-Type -AssemblyName System.Drawing
  3. Add-Type -AssemblyName Microsoft.VisualBasic
  4. $form = New-Object System.Windows.Forms.Form
  5. $image = [System.Drawing.Image]::Fromfile('Path to image')
  6. $pictureBox = new-object Windows.Forms.PictureBox #--instantiates a PictureBox
  7. $pictureBox.width=420
  8. $pictureBox.height=420
  9. $pictureBox.top=20
  10. $pictureBox.left=350
  11. $pictureBox.Image=$image
  12. # $form.Font = New-Object System.Drawing.Font("Lucida Console",11,[System.Drawing.FontStyle]::Regular)
  13. $form = New-Object System.Windows.Forms.Form
  14. $form.Text = 'MSSQL DATABASE BACKUP UTILITY'
  15. $form.Size = New-Object System.Drawing.Size(800,500)
  16. $form.Font = New-Object System.Drawing.Font("Times New Roman",11,[System.Drawing.FontStyle]::Regular)
  17. $form.StartPosition = 'CenterScreen'
  18. $form.Controls.add($pictureBox)
  19. $okButton = New-Object System.Windows.Forms.Button
  20. $okButton.Location = New-Object System.Drawing.Point(10,400)
  21. $okButton.Size = New-Object System.Drawing.Size(75,23)
  22. $okButton.Text = 'OK'
  23. $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
  24. $form.AcceptButton = $okButton
  25. $form.Controls.Add($okButton)
  26. # first DROPDOWN Box
  27. $label = New-Object System.Windows.Forms.Label
  28. $label.Location = New-Object System.Drawing.Point(10,20)
  29. $label.Size = New-Object System.Drawing.Size(280,20)
  30. $label.Text = 'SQL Instance Name'
  31. $form.Controls.Add($label)
  32. $DropDownBox = New-Object System.Windows.Forms.ComboBox
  33. $DropDownBox.Location = New-Object System.Drawing.Size(10,40)
  34. $DropDownBox.Size = New-Object System.Drawing.Size(260,20)
  35. $DropDownBox.DropDownHeight = 200
  36. $Form.Controls.Add($DropDownBox)
  37. $wksList= invoke-sqlcmd -query "select * from VIEW NAME
  38. order by instance_name" -database DBA -serverinstance INSTANCE_NAME
  39. foreach ($wks in $wksList)
  40. { $DropDownBox.Items.Add($wks.Instance_Name) }
  41. $Button = New-Object System.Windows.Forms.Button
  42. $Button.Location = New-Object System.Drawing.Size(10,80)
  43. $Button.Size = New-Object System.Drawing.Size(120,23)
  44. $Button.Text = "Set Instance"
  45. $Form.Controls.Add($Button)
  46. # Add Button event
  47. $Button.Add_Click(
  48. {
  49. #second DROPDOWN Box
  50. $InstanceName = $DropDownBox.SelectedItem
  51. $label2 = New-Object System.Windows.Forms.Label
  52. $label2.Location = New-Object System.Drawing.Point(10,120)
  53. $label2.Size = New-Object System.Drawing.Size(280,20)
  54. $label2.Text = 'Database Name'
  55. $form.Controls.Add($label2)
  56. $DropDownBox2 = New-Object System.Windows.Forms.ComboBox
  57. $DropDownBox2.Location = New-Object System.Drawing.Size(10,140)
  58. $DropDownBox2.Size = New-Object System.Drawing.Size(260,20)
  59. $DropDownBox2.DropDownHeight = 200
  60. $Form.Controls.Add($DropDownBox2)
  61. $wksList2= invoke-sqlcmd -query "select name from sys.databases
  62. where database_id>4
  63. order by name" -database MASTER -serverinstance $InstanceName
  64. foreach ($wks in $wksList2)
  65. { $DropDownBox2.Items.Add($wks.name) }
  66. })
  67. # end second DROPDOWN box
  68. # third text box
  69. $label3 = New-Object System.Windows.Forms.Label
  70. $label3.Location = New-Object System.Drawing.Point(10,220)
  71. $label3.Size = New-Object System.Drawing.Size(280,20)
  72. $label3.Text = 'Desired Backup Location'
  73. $form.Controls.Add($label3)
  74. $textBox3 = New-Object System.Windows.Forms.TextBox
  75. $textBox3.Location = New-Object System.Drawing.Point(10,240)
  76. $textBox3.Size = New-Object System.Drawing.Size(260,20)
  77. $form.Controls.Add($textBox3)
  78. # end third text box
  79. # fourth text box
  80. $label4 = New-Object System.Windows.Forms.Label
  81. $label4.Location = New-Object System.Drawing.Point(10,280)
  82. $label4.Size = New-Object System.Drawing.Size(280,20)
  83. $label4.Text = 'Desired Backup Name'
  84. $form.Controls.Add($label4)
  85. $textBox4 = New-Object System.Windows.Forms.TextBox
  86. $textBox4.Location = New-Object System.Drawing.Point(10,300)
  87. $textBox4.Size = New-Object System.Drawing.Size(260,20)
  88. $form.Controls.Add($textBox4)
  89. # end fourth text box
  90. # fifth text box
  91. $label5 = New-Object System.Windows.Forms.Label
  92. $label5.Location = New-Object System.Drawing.Point(10,340)
  93. $label5.Size = New-Object System.Drawing.Size(280,20)
  94. $label5.Text = 'Your Email Address'
  95. $form.Controls.Add($label5)
  96. $textBox5 = New-Object System.Windows.Forms.TextBox
  97. $textBox5.Location = New-Object System.Drawing.Point(10,360)
  98. $textBox5.Size = New-Object System.Drawing.Size(260,20)
  99. $form.Controls.Add($textBox5)
  100. # end fifth text box
  101. $form.Topmost = $true
  102. $form.Add_Shown({$DropDownBox.Select()})
  103. $result = $form.ShowDialog()
  104. if ($result -eq [System.Windows.Forms.DialogResult]::OK)
  105. {
  106. $Server = $DropDownBox.text
  107. $DBName = $DropDownBox2.text
  108. $SharedFolder = $textBox3.text
  109. $BUName = $textBox4.text
  110. $mail = $textBox5.text
  111. Get-Variable
  112. <#$Date = Get-Date -format yyyyMMdd#>
  113. Backup-SqlDatabase -ServerInstance $server `
  114. -Database $DBName `
  115. -CopyOnly `
  116. -CompressionOption on `
  117. -BackupFile "$($SharedFolder)\$DBName-$BUName.bak" `
  118. -BackupAction Database `
  119. -checksum
  120. # SMPT Section
  121. $From = "SUPPORT EMAIL"
  122. $To = $mail
  123. $Subject = "RECENT MSSQL BACKUP REQUEST"
  124. $Body = "Your MSSQL database backup from $server, $DBName, has been backed up to $SharedFolder. Please check the directory path you specified for your backup. If you have any problems, fwd this email to SUPPORT EMAIL for assistance."
  125. $PSEmailServer = "SMTP SERVER"
  126. Send-MailMessage -From $From -To $To -Subject $Subject -Body $Body -SmtpServer $PSEmailserver
s4chpxco

s4chpxco1#

本例使用一个按钮来控制工作流。在这种情况下,用户将在第一个下拉框中选择示例。单击按钮时,选定的名称将存储在 $InstanceName 可以在第二个下拉列表的查询中使用

  1. $form = New-Object System.Windows.Forms.Form
  2. # first DROPDOWN Box
  3. $label = New-Object System.Windows.Forms.Label
  4. $label.Location = New-Object System.Drawing.Point(10,20)
  5. $label.Size = New-Object System.Drawing.Size(280,20)
  6. $label.Text = 'SQL Server Name'
  7. $form.Controls.Add($label)
  8. $DropDownBox = New-Object System.Windows.Forms.ComboBox
  9. $DropDownBox.Location = New-Object System.Drawing.Size(10,40)
  10. $DropDownBox.Size = New-Object System.Drawing.Size(260,20)
  11. $DropDownBox.DropDownHeight = 200
  12. $Form.Controls.Add($DropDownBox)
  13. $wksList= invoke-sqlcmd -query "select * from VIEW_NAME
  14. order by instance_name" -database DATABASE_NAME -serverinstance INSTANCE_NAME
  15. foreach ($wks in $wksList)
  16. { $DropDownBox.Items.Add($wks.Instance_Name) }
  17. $InstanceName = $DropDownBox.SelectedItem
  18. $Button = New-Object System.Windows.Forms.Button
  19. $Button.Location = New-Object System.Drawing.Size(10,60)
  20. $Button.Size = New-Object System.Drawing.Size(120,23)
  21. $Button.Text = "Select DB"
  22. $Form.Controls.Add($Button)
  23. # Add Button event
  24. $Button.Add_Click(
  25. {
  26. #second DROPDOWN Box
  27. $label2 = New-Object System.Windows.Forms.Label
  28. $label2.Location = New-Object System.Drawing.Point(10,90)
  29. $label2.Size = New-Object System.Drawing.Size(280,20)
  30. $label2.Text = 'Database Name'
  31. $form.Controls.Add($label2)
  32. $DropDownBox2 = New-Object System.Windows.Forms.ComboBox
  33. $DropDownBox2.Location = New-Object System.Drawing.Size(10,110)
  34. $DropDownBox2.Size = New-Object System.Drawing.Size(260,20)
  35. $DropDownBox2.DropDownHeight = 200
  36. $Form.Controls.Add($DropDownBox2)
  37. $wksList2= invoke-sqlcmd -query "select name from sys.databases
  38. where database_id>4
  39. order by name" -database MASTER -serverinstance $InstanceName
  40. foreach ($wks in $wksList2)
  41. { $DropDownBox2.Items.Add($wks) }
  42. })
  43. $form.ShowDialog()
展开查看全部
3zwjbxry

3zwjbxry2#

替换 $InstanceName = $DropDownBox.SelectedItem;$DropDownBox.Add_SelectedIndexChanged({ $InstanceName = $DropDownBox.SelectedItem; }) 你就是gtg。

相关问题