Powershell空错误

Powershell空错误,powershell,powershell-3.0,Powershell,Powershell 3.0,出于某种原因,当我在表单上单击Ok发送电子邮件时,它会显示我的主题为null或空 但它并不抱怨电子邮件。然而,两者的代码几乎完全相同 我是不是错过了一些很简单的东西?这是漫长的一天 [void][System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”) [void][System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) $Icon

出于某种原因,当我在表单上单击Ok发送电子邮件时,它会显示我的主题为null或空

但它并不抱怨电子邮件。然而,两者的代码几乎完全相同

我是不是错过了一些很简单的东西?这是漫长的一天

[void][System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
[void][System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
$Icon=新对象system.drawing.Icon(“C:test.ico”)
$objForm=新对象System.Windows.Forms.Form
$objForm.Text=“示例”
$objForm.Size=新对象系统.Drawing.Size(300350)
$objForm.StartPosition=“中心屏幕”
$objForm.Icon=$Icon
$objForm.KeyPreview=$True
$objForm.Add_KeyDown({if($u.KeyCode-eq“Escape”)
{$objForm.Close()}})
[string]$USER=$objEmailTextBox.Text
[字符串]$SUBJECT=$objSubjectTextBox.Text
[string]$BODY=$objBodyTextBox.Text
$OKButton=新建对象System.Windows.Forms.Button
$OKBUTON.Location=新对象系统.图纸.尺寸(75270)
$OKBUTON.Size=新对象系统.Drawing.Size(100,23)
$OKButton.Text=“提交票据”
$objForm.Controls.Add($OKButton)
$OK按钮。添加\单击({
发送电子邮件($USER、$SUBJECT、$BODY)
})
$CancelButton=新建对象System.Windows.Forms.Button
$CancelButton.Location=新对象系统.图纸.尺寸(175270)
$CancelButton.Size=新对象系统.Drawing.Size(75,23)
$CancelButton.Text=“取消”
$CancelButton.Add_单击({$objForm.Close()})
$objForm.Controls.Add($CancelButton)
$objEmailLabel=新对象System.Windows.Forms.Label
$objEmailLabel.Location=新对象系统.图纸.尺寸(10,20)
$objEmailLabel.Size=新对象系统.Drawing.Size(37,20)
$objEmailLabel.Text=“电子邮件:”
$objForm.Controls.Add($objemaillable)
$objEmailTextBox=新对象System.Windows.Forms.TextBox
$objEmailTextBox.Location=新对象系统.图纸.尺寸(55,17)
$objEmailTextBox.Size=新对象系统.Drawing.Size(200,20)
$objForm.Controls.Add($objEmailTextBox)
$objLabel=新对象System.Windows.Forms.Label
$objLabel.Location=新对象系统.图纸.尺寸(10,40)
$objLabel.Size=新对象系统.Drawing.Size(45,20)
$objLabel.Text=“主题:”
$objForm.Controls.Add($objLabel)
$objSubjectTextBox=新对象System.Windows.Forms.TextBox
$objSubjectTextBox.Location=新对象系统.Drawing.Size(55,39)
$objSubjectTextBox.Size=新对象系统.Drawing.Size(200,20)
$objForm.Controls.Add($objSubjectTextBox)
$objLabel=新对象System.Windows.Forms.Label
$objLabel.Location=新对象系统.图纸.尺寸(10,63)
$objLabel.Size=新对象系统.Drawing.Size(45,20)
$objLabel.Text=“正文:”
$objForm.Controls.Add($objLabel)
$objBodyTextBox=新对象System.Windows.Forms.TextBox
$objBodyTextBox.Location=新对象系统.Drawing.Size(55,60)
$objBodyTextBox.Size=新对象系统.Drawing.Size(200150)
$objBodyTextBox.MultiLine=$True
$objForm.Controls.Add($objBodyTextBox)
函数SEND-EMAIL([String]$USER,[String]$SUBJ,[String]$BODYTEXT)
{
发送邮件消息-发送至“bla@blah.com“-来自$USER-subject$subc-SmtpServer mail.blah.com-body$BODYTEXT-BodyAsHtml
}
$objForm.Topmost=$True
$objForm.Add_显示({$objForm.Activate()})
[void]$objForm.ShowDialog()
$x
输出:错误:发送邮件消息:无法验证参数“Subject”的参数。参数为null或为空。提供一个不为null或空的参数,然后重试
错误:再次使用e命令。
test.ps1(69):错误:第69行字符:68

创建表单时,您正在分配$USER/SUBJECT/BODY。用户还没有机会输入任何内容。当“确定”按钮单击处理程序执行时,尝试获取值:

$OKButton.Add_Click({
    $user = $objEmailTextBox.Text
    $subject = $objSubjectTextBox.Text
    $body = $objBodyTextBox.Text
    Send-Email $user $subject $body
})

还请记住,调用PowerShell函数(命令)与调用任何其他命令一样。使用空格分隔的参数。除非表达式需要求值,否则不需要参数。

Powershell函数是使用function1 param1 param2而不是function(param1,param2)语法调用的,因此请更改:

$OK按钮。添加\u单击({
发送电子邮件($USER、$SUBJECT、$BODY)
...
致:

$OK按钮。添加\u单击({
发送电子邮件$USER$主题$BODY
...
只有从Powershell调用的.Net函数才使用函数(param1,param2)表示法