Search code examples
powershellexchange-server

Remote execution on Exchange server failed


I want to remote enable the email-address-policy for a single mailbox on a exchange server (2010).

I can do this:

$samaccountname = $args[0]       # gets sam from command line

$EncryptedPassword = Get-Content -Path "C:\temp\password.txt"
$SecurePassword = ConvertTo-SecureString -String $EncryptedPassword
$Credential = New-Object System.Management.Automation.PSCredential "xyzdom\sco_admin", $SecurePassword

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xyzexcas01/PowerShell/ -Authentication Kerberos -Credential $Credential
Import-PSSession $Session -AllowClobber -CommandName Set-Mailbox
Get-Mailbox -Identity $samaccountname | Set-Mailbox -EmailAddressPolicyEnabled $True

Remove-PSSession $Session

It works if I open a powershell as administrator on the Orchestrator server. Then it executes the command on the exchange server as it should.

But the script does not work if Orchestrator tries to execute it. I do not know what settings Orchestrator uses when executing it. But I have a similar script, which is working with Orchestrator.

$samaccountname = $args[0]       # gets sam from command line

$EncryptedPassword = Get-Content -Path "C:\temp\password.txt"
$SecurePassword = ConvertTo-SecureString -String $EncryptedPassword
$Credential = New-Object System.Management.Automation.PSCredential "xyzdom\sco_admin", $SecurePassword
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xyzexcas01/PowerShell/ -Authentication Kerberos -Credential $Credential
Import-PSSession $Session -AllowClobber -CommandName enable-mailbox
 
$username_param = $samaccountname
$emailalias_param = $samaccountname
 
Invoke-Command -ArgumentList $username_param,$emailalias_param –session $Session -scriptblock {
    param($username_exc, $alias_exc)
    Enable-Mailbox -Identity $username_exc -Alias $alias_exc  -DomainController 'xyzdc01.zfpdom.zfp'

}

Remove-PSSession $Session

This script makes a new mailbox. It is working.

Can anyone show me a solution for the first script? I am totally new in powershell so I can't figure it out. Maybe someone can change my first script to do it with this Invoke-Command scriptblock. I am sure, then it will work.

Thank you.

Greetings


Solution

  • Replace the commands inside the invoke-command, and the variables accordingly. Also, add the get-mailbox commandlet to the session. I am not able to try it, though, so I added the -verbose and -whatif switches as a failsafe. Note that if the samaccountname variable is empty, the Set-Mailbox will run on all mailboxes. The script can be tested standalone before running it in the Orchestrator.

    $samaccountname = $args[0]       # gets sam from command line
    
    $EncryptedPassword = Get-Content -Path "C:\temp\password.txt"
    $SecurePassword = ConvertTo-SecureString -String $EncryptedPassword
    $Credential = New-Object System.Management.Automation.PSCredential "xyzdom\sco_admin", $SecurePassword
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xyzexcas01/PowerShell/ -Authentication Kerberos -Credential $Credential
    Import-PSSession $Session -AllowClobber -CommandName Set-Mailbox,Get-Mailbox
    Invoke-Command -ArgumentList $samaccountname –session $Session -scriptblock {
        param($username_exc)
        Get-Mailbox -Identity $username_exc| Set-Mailbox -EmailAddressPolicyEnabled $True -verbose -whatif # remove the -whatif to perform changes
    }
    Remove-PSSession $Session