У меня есть сценарий Powershell, который я пытаюсь настроить, чтобы он мог отправлять мне сообщения о статусе Exchange каждый день. У меня сценарий работает нормально, когда я запускаю его вручную из окна консоли EMS, но когда я пытаюсь добавить его в качестве запланированной задачи, мне нужно добавить строку Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin на вершине. Это добавление, кажется, вызывает проблему, так как когда я пытаюсь запустить скрипт из окна задачи, я получаю эту ошибку:
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
param(
$MailServer = "mailserver",
$MailTo = "me@company.com",
$Mailfrom = "me@company.com",
$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. Я вызываю сценарий с помощью командного файла в запланированной задаче с помощью команды: Powershell -команда "& {C: \ Scripts \ exchemail.ps1}"
в этом сценарии должно быть что-то не хватает. Вы используете Param, который должен быть первой строкой в блоке скрипта. Скорее всего, происходит то, что PowerShell смотрит на это так, как если бы вы набрали
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin mailserver","me@company.com","me@company.com",Exchange System Status ...
Вам не хватает объявления функции и фигурных скобок (если это то, что вы пытаетесь сделать). На странице, которую вы указали как источник
Может быть проблема с кавычками и / или экранированием символов? Может, разница не в добавлении / удалении одной строчки, а в том, как вы ее запускаете?
Вместо того, чтобы пытаться понять, что не так, я предлагаю то, что работает для меня на 100%.
Этот скрипт получает статистику почтового ящика, но вы можете адаптировать его, чтобы делать все, что захотите.
Содержимое Get-MailboxStatistics.ps1:
$FromAddress = "noreply@company.local"
$ToAddress = "sysadmin@company.local"
$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
Может быть, проблема не в одной строке ... просто когда она закомментирована, все ломается, поэтому фактическая ошибка не имеет возможности всплыть.
Попробуйте разбить этот сценарий на несколько строк, назначая переменные и свойства отдельно, и вы сможете сузить проблему.