我有一个 Powershell 脚本,我正在尝试设置它,以便它可以每天向我发送 Exchange 状态电子邮件。当我从 EMS 控制台窗口手动运行该脚本时,它运行良好,但当我尝试将其添加为计划任务时,我需要在顶部添加行 Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin。这个添加似乎导致了问题,因为当我尝试从任务窗口运行脚本时,我收到此错误:
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
param(
$MailServer = "mailserver",
$MailTo = "[email protected]",
$Mailfrom = "[email protected]",
$Subject = "Exchange System Status " + (Get-Date))
$body = Get-MailboxDatabase -Status | select Name,LastDifferentialBackup,LastFullBackup |
Out-String
$body2 = Get-ExchangeServer | where {$_.ServerRole -Match "HubTransport"} | Get-Queue | select Identity,Status,MessageCount,NextHopDomain | Out-String
$email = new-object system.net.mail.mailmessage
$email.to.add($MailTo)
$email.from = $Mailfrom
$email.subject = $Subject
$email.isbodyhtml = $False
$email.body = $body,$body2
$client = new-object system.net.mail.smtpclient $mailserver
$client.send($email)
当我在顶部看到 PSSnapin 行并运行该任务时,出现此错误:赋值表达式无效。赋值运算符的左侧必须是可以赋值的对象,例如变量或属性
删除该行然后尝试运行该任务显然行不通,因为默认的 powershell 窗口中没有 Exchange snap。我使用计划任务中的批处理文件调用该脚本,命令如下:Powershell -命令“&{C:\Scripts\exchemail.ps1}”
答案1
我不会去试图找出问题所在,而是会建议对我而言 100% 有效的方法。
该脚本获取邮箱统计信息,但您可以对其进行调整以执行任何您想要的操作。
Get-MailboxStatistics.ps1 的内容:
$FromAddress = "[email protected]"
$ToAddress = "[email protected]"
$MessageSubject = "Exchange Mailbox Size Report"
$MessageBody = "Attached is the current list of mailbox sizes."
$SendingServer = "exchange.company.local"
Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | Select-Object DisplayName, @{Name="Size(MB)";Expression={$_.TotalItemSize.Value.ToMB()}}, ItemCount, LastLogonTime | Export-CSV -path "mailboxstats.csv" -notypeinformation
###Create the mail message and add the statistics text file as an attachment
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
$Attachment = New-Object Net.Mail.Attachment("mailboxstats.csv")
$SMTPMessage.Attachments.Add($Attachment)
###Send the message
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)
这是由包含以下行的计划批处理文件运行的:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "D:\Exchange\Bin\ExShell.psc1" -Command C:\Scripts\Get-MailboxStatistics.ps1
答案2
这个脚本肯定缺少一些东西。你正在使用 Param,它必须是脚本块的第一行。可能发生的情况是,powershell 将此视为你输入的内容
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin mailserver","[email protected]","[email protected]",Exchange System Status ...
您缺少函数声明和括号(如果您尝试这样做的话)。您提到的页面中没有函数来源
答案3
这可能是引号和/或转义字符的问题吗?也许差异不在于添加/删除的一行,而在于运行它的方式?
答案4
问题可能不在于那一行......只是当它被注释掉时整个事情就被破坏了,所以实际的错误就没有机会浮出水面。
尝试将此脚本分成多行,分别分配变量和属性,这样您应该能够缩小问题范围。