由于某种原因,当我在表单上单击“确定”发送电子邮件时,它表示我的主题为空或空。
但它并没有抱怨电子邮件。但两者的代码几乎完全相同。
我在这里错过了一些非常简单的东西吗?这是漫长的一天。
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$Icon = New-Object system.drawing.icon ("C:test.ico")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "EXAMPLE"
$objForm.Size = New-Object System.Drawing.Size(300,350)
$objForm.StartPosition = "CenterScreen"
$objForm.Icon = $Icon
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")
{$objForm.Close()}})
[string] $USER = $objEmailTextBox.Text
[string] $SUBJECT = $objSubjectTextBox.Text
[string] $BODY = $objBodyTextBox.Text
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,270)
$OKButton.Size = New-Object System.Drawing.Size(100,23)
$OKButton.Text = "Submit Ticket"
$objForm.Controls.Add($OKButton)
$OKButton.Add_Click({
SEND-EMAIL($USER, $SUBJECT, $BODY)
})
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(175,270)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)
$objEmailLabel = New-Object System.Windows.Forms.Label
$objEmailLabel.Location = New-Object System.Drawing.Size(10,20)
$objEmailLabel.Size = New-Object System.Drawing.Size(37,20)
$objEmailLabel.Text = "Email:"
$objForm.Controls.Add($objEmailLabel)
$objEmailTextBox = New-Object System.Windows.Forms.TextBox
$objEmailTextBox.Location = New-Object System.Drawing.Size(55,17)
$objEmailTextBox.Size = New-Object System.Drawing.Size(200,20)
$objForm.Controls.Add($objEmailTextBox)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,40)
$objLabel.Size = New-Object System.Drawing.Size(45,20)
$objLabel.Text = "Subject:"
$objForm.Controls.Add($objLabel)
$objSubjectTextBox = New-Object System.Windows.Forms.TextBox
$objSubjectTextBox.Location = New-Object System.Drawing.Size(55,39)
$objSubjectTextBox.Size = New-Object System.Drawing.Size(200,20)
$objForm.Controls.Add($objSubjectTextBox)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,63)
$objLabel.Size = New-Object System.Drawing.Size(45,20)
$objLabel.Text = "Body:"
$objForm.Controls.Add($objLabel)
$objBodyTextBox = New-Object System.Windows.Forms.TextBox
$objBodyTextBox.Location = New-Object System.Drawing.Size(55,60)
$objBodyTextBox.Size = New-Object System.Drawing.Size(200,150)
$objBodyTextBox.MultiLine = $True
$objForm.Controls.Add($objBodyTextBox)
Function SEND-EMAIL([String] $USER, [String] $SUBJ, [String]$BODYTEXT)
{
send-mailmessage -to "bla@blah.com" -from $USER -subject $SUBJ -SmtpServer mail.blah.com -body $BODYTEXT -BodyAsHtml
}
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
$x
OUTPUT: ERROR: Send-MailMessage : Cannot validate argument on parameter 'Subject'. The argument is null or empty. Supply an argument that is not null or empty and then try th
ERROR: e command again.
test.ps1 (69): ERROR: At Line: 69 char: 68
答案 0 :(得分:0)
您正在创建表单时分配$ USER / SUBJECT / BODY。用户还没有机会输入任何内容。尝试在执行OK按钮单击处理程序时获取值:
$OKButton.Add_Click({
$user = $objEmailTextBox.Text
$subject = $objSubjectTextBox.Text
$body = $objBodyTextBox.Text
Send-Email $user $subject $body
})
还要记住,像任何其他命令一样调用PowerShell函数(命令)。使用空格分隔的args。除非你有一个需要评估的表达式,否则你不需要parens。
答案 1 :(得分:0)
使用 function1 param1 param2 而不是 function(param1,param2)语法调用Powershell函数,因此更改:
$OKButton.Add_Click({
SEND-EMAIL($USER, $SUBJECT, $BODY)
...
为:
$OKButton.Add_Click({
SEND-EMAIL $USER $SUBJECT $BODY
...
仅从Powershell调用的.Net函数使用函数(param1,param2)表示法。