Назад | Перейти на главную страницу

Запуск сценария Exchange Powershell из пакетного файла: команда не работает. Что не так с моим синтаксисом?

Исходя из этого вопроса здесь: Как создать сценарий для Exchange Powershell для изменения настроек всех общих почтовых ящиков?

Вот мой скрипт Powershell (прокрутите вправо, чтобы увидеть все):

$Mailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox

Foreach ($Mailbox in $Mailboxes) { 
    Set-Mailbox $Mailbox -MessageCopyForSentAsEnabled $True -MessageCopyForSendOnBehalfEnabled $True
    }

Он отлично работает сам по себе, если запускается из окна Exchange Management Shell.

Но я хочу запустить его из командного файла, поэтому я нашел следующую страницу Microsoft: https://technet.microsoft.com/en-us/library/bb123798%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396#RunScript

Следуя приведенному там руководству, я создал этот командный файл (прокрутите вправо, чтобы увидеть все):

PowerShell.exe -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; 'C:\Program Files\Microsoft\Exchange Server\V15\bin\enablesentforshared.ps1'"

Я добавил одну вещь, которая не была указана в инструкциях, - это одинарные кавычки вокруг полного пути к сценарию, который я хочу запустить. Без одинарных кавычек я получал сообщение об ошибке C:\Program не является распознанным командлетом или сценарием.

В любом случае, когда я запускаю этот командный файл, открывается окно терминала, которое затем изменяется на окно Powershell, и имя пути к сценарию распечатывается на экране, но оно распечатывается ДО [PS] подсказка, и на самом деле ничего не выполняется.

Вот как выглядит мое окно Powershell после выполнения командного файла:

VERBOSE: Connecting to exchangeserver.domain.com
VERBOSE: Connected to exchangeserver.domain.com
C:\Program Files\Microsoft\Exchange Server\V15\bin\enablesentforshared.ps1
[PS] C:\Users\Admin.domain>

И нет никаких указаний на то, что сценарий действительно запущен.

Так что я здесь не так? Я попытался изменить . к & на основе некоторых поисковых запросов, которые я сделал, но тогда это дает мне ошибку о Connect-ExchangeServer непризнанная команда, поэтому я думаю, что . ближе к правильному.

Попробуйте так (добавлен доцорсинг второго скрипта):

PowerShell.exe -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; . 'C:\Program Files\Microsoft\Exchange Server\V15\bin\enablesentforshared.ps1'"

Сценарий файла bat, включая параметр отправки почты. Этот файл bat работает на моем оконном сервере 2016 и сервере обмена 2016.

PowerShell.exe -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; . C:\Script\Get-ExchangeEnvironmentReport.ps1 -HTMLReport C:\Script\Get-exchangeReport.html -SendMail:$true -MailFrom:Admin@domain.com -MailTo:user1@domain.com -MailServer:mail.domain.com"

Я делаю это в файле BAT:

powershell -psconsolefile "C: \ Program Files \ Microsoft \ Exchange Server \ V15 \ Bin \ exshell.psc1" -noexit "& Get-Mailbox | Get-MailboxStatistics" пауза