我正在尝试对我们的Exchange服务器运行远程PowerShell命令,但是当从我们的开发服务器运行该命令时出现Access Is Denied
错误。当我在本地计算机上运行代码时,代码工作正常,我甚至可以远程访问开发服务器并运行PowerShell命令并使连接完美。我需要帮助来弄清楚为什么我们只在运行开发服务器的代码时遇到Access Is Denied
错误。
public static void CreateEmailBox(string samAccountName)
{
var securedPassword = new SecureString();
foreach (char character in ConfigurationManager.AppSettings["ServiceAccountPassword"]) { securedPassword.AppendChar(character); }
var loginInfo = new PSCredential(ConfigurationManager.AppSettings["ServiceAccountUser"], securedPassword);
var connection = new WSManConnectionInfo(new Uri("http://exch-svr.domain.local/powershell"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", loginInfo);
connection.AuthenticationMechanism = AuthenticationMechanism.Kerberos;
using (var runspace = RunspaceFactory.CreateRunspace(connection))
{
using (var powershell = PowerShell.Create())
{
powershell.AddCommand("enable-mailbox");
powershell.AddParameter("Identity", samAccountName);
powershell.AddParameter("Database", "Mailbox Database 4");
runspace.Open();
powershell.Runspace = runspace;
powershell.Invoke();
runspace.Close();
}
}
}
答案 0 :(得分:0)
问题在于密码,以及如何将其存储为安全字符串。
安全字符串在计算机之间是不同的,因为用于加密/解密密码的加密密钥在每台计算机上都是不同的。
您需要使用共享密钥,或为要运行此计算机的每台计算机存储单独的安全字符串。
有关如何在计算机之间传递安全字符串的详细信息,请参阅我的更详细的答案:ConvertTo-SecureString gives different experience on different servers