Exchange 服务器上的远程执行失败

Remote execution on Exchange server failed

我想远程启用 exchange 服务器 (2010) 上单个邮箱的电子邮件地址策略。

我能做到:

$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

如果我在 Orchestrator 服务器上以管理员身份打开 powershell,它就会工作。然后它会在交换服务器上执行命令。

但是如果 Orchestrator 尝试执行脚本,脚本将不起作用。我不知道 Orchestrator 在执行时使用什么设置。但是我有一个类似的脚本,它正在与 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

此脚本创建一个新邮箱。正在运行。

谁能告诉我第一个脚本的解决方案?我是 powershell 的新手,所以我无法弄清楚。也许有人可以更改我的第一个脚本以使用此 Invoke-Command 脚本块来完成。我确定,那么它将起作用。

谢谢。

问候

替换 invoke-command 中的命令和相应的变量。此外,将 get-mailbox commandlet 添加到会话中。不过,我无法尝试,所以我添加了 -verbose-whatif 开关作为故障保护。请注意,如果 samaccountname 变量为空,则 Set-Mailbox 将在所有邮箱上 运行。该脚本可以在运行在 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

我发现的另一个可行的解决方案:

 #Parameter Laden
$samaccountname = $args[0]       # $samaccountname wird übergeben

$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
Get-Mailbox -Identity $samaccountname | Set-Mailbox -EmailAddressPolicyEnabled $True

Remove-PSSession $Session