0

Coming from this question here: How to create a script for Exchange Powershell to modify settings for all shared mailboxes?

Here is my Powershell script (scroll right to see all):

$Mailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox

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

It works fine on its own if launched from an Exchange Management Shell window.

But I want to launch it from a batch file, so I found the following Microsoft page: https://technet.microsoft.com/en-us/library/bb123798%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396#RunScript

Following the guide there, I created this batch file (scroll right to see all):

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'"

One thing I added which was not specified in the instructions is single quotes around the full path to the script I want to run. Without the single quotes I was getting an error about C:\Program not being a recognized cmdlet or script.

Anyway, when I run this batch file, the terminal window opens, then changes to a Powershell window, and the path name to the script gets printed out to the screen, but it prints out BEFORE the [PS] prompt, and nothing actually gets executed.

This is what my Powershell window looks like after executing the batch file:

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>

And there is no indication that the script has actually run.

So what have I got wrong here? I tried changing the . to a & based on some googling I did, but then that gives me an error about Connect-ExchangeServer being an unrecognized command, so I think the . is closer to being correct.

Daniel
  • 1,614
  • 9
  • 29
  • 47
  • That looks like it should work. Does your script have any output when you run it from powershell normally? – David Aug 26 '16 at 05:00
  • So, there is definitely an output. Since I've run the script successfully before (without the batch file), then whenever I try to run the script again I get a bunch of notices that there are no settings to change (because I already changed them). But anyway you got me thinking... since I have the script in the Exchange Server `\bin` directory, I don't use the full path when running from the powershell terminal, just the name `enablesentforshared.ps1`. It works like this from the powershell terminal. So, I tried removing the path from the batch file, *and it also works now!* – Daniel Aug 26 '16 at 05:25
  • Also, if I try running the full path, even from the powershell terminal, `C:\Program Files\Microsoft\Exchange Server\V15\bin\enablesentforshared.ps1` it exhibits the same behavior as the batch file, telling me that `C:\Program` is not recognized. So if I try putting quotes at the terminal, like `'C:\Program Files\Microsoft\Exchange Server\V15\bin\enablesentforshared.ps1'` or `"C:\Program Files\Microsoft\Exchange Server\V15\bin\enablesentforshared.ps1"`, it again has the same behavior as the batch file, just spitting the full path back out at me and not actually running the script. Strange. – Daniel Aug 26 '16 at 05:27

3 Answers3

3

Try this (added dotsourcing of the second script):

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'"
Anton Krouglov
  • 296
  • 1
  • 3
  • 13
0

Bat file script including send mail parameter. This bat file work on my window server 2016 and exchange server 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"
ThoriumBR
  • 5,302
  • 2
  • 24
  • 34
-1

I do this in a BAT file:

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