Powershell Send-MailMessage cmdlet在我将其设置为变量时运行

Powershell Send-MailMessage cmdlet在我将其设置为变量时运行,powershell,variable-assignment,Powershell,Variable Assignment,我正在尝试将Send MailMessage设置为变量。我输入Powershell后,它会自动发送电子邮件。我的语法: $EmailTo = "To" $EmailFrom = "From" $EmailSmtp = "smtp" $EmailComputer = "$Env:Computername" $EmailSubject = "Warning! $Emailcomputer had errors!" $EmailCopyWarning = Send-MailMessage -to $E

我正在尝试将Send MailMessage设置为变量。我输入Powershell后,它会自动发送电子邮件。我的语法:

$EmailTo = "To"
$EmailFrom = "From"
$EmailSmtp = "smtp"
$EmailComputer = "$Env:Computername"
$EmailSubject = "Warning! $Emailcomputer had errors!"
$EmailCopyWarning = Send-MailMessage -to $Emailto -from $Emailfrom -subject $Emailsubject -smtpserver $Emailsmtp -body $CopyFalse
$EmailSvcWarning = Send-MailMessage -to $Emailto -from $Emailfrom -subject $Emailsubject -smtpserver $Emailsmtp -body $CCMExecNoSvc
上面设置的所有变量都会在我的代码中正确显示,但是当我尝试为$emailcopywarning和$emailsvcwarning设置变量时,它们会立即向我发送电子邮件。我的意图是只有在有错误时才发送电子邮件。非常感谢

如果要将特定的PowerShell代码作为变量“保存”以供以后执行,则需要创建
scriptblock

$EmailCopyWarning = [scriptblock]::Create("Send-MailMessage -to $Emailto -from $Emailfrom -subject $Emailsubject -smtpserver $Emailsmtp -body $CopyFalse");
然后执行它:

$EmailCopyWarning.Invoke();

但这不是你真正应该做的。编写错误检测代码,如果检测到错误,只需发送电子邮件即可。或者调用您定义的函数来发送它,如果您的目的是模块化脚本。

函数SendCopyWarning{send MailMessage-to$Emailto-from$Emailfrom-subject$Emailsubject-smtpserver$Emailsmtp-body$CopyFalse}


If(test path yada){do this}else{do this;SendCopyWarning}

我认为您希望将它们声明为函数,而不是变量。在这种情况下,您需要检查错误,然后调用
Send MailMessage
。将
Send MailMessage…
分配给变量意味着您运行cmdlet,并将其返回的内容分配给变量。此脚本(未给出)还有很多工作要做,所有这些都可以工作。只是这一部分我设置起来有困难。我有一些if语句,用于检查触发机器是否可以访问UNC以及所述服务是否丢失的事件。非常感谢!感谢alroc,它已被分配,但它返回:PS C:\Windows\system32>$EmailSvcWarning.Invoke()异常调用带有“0”参数的“Invoke”:“找不到接受参数“BRT-1142916920”的位置参数”。行:1 char:1+$EmailSvcWarning.Invoke()+~~~~~~~~~~~~~~~~~~~~~~~~~~~未指定类别信息:(:)[],MethodInvocationException+FullyQualifiedErrorId:ParameterBindingExceptionTanks Everyone。下面是我所做的:函数SendCopyWarning{Send MailMessage-to$Emailto-from$Emailfrom-subject$Emailsubject-smtpserver$Emailsmtp-body$CopyFalse}……然后我做了一个If(测试路径yada){do this}else{do do this;SendCopyWarning}如果看不到您在这些变量中设置的值,就不可能说出。它可能将该字符串解释为参数名;您可能必须转义连字符或其他字符。没关系。我已经完成了我需要它做的事情。非常感谢!