访问拒绝运行远程PowerShell,但只有从开发服务器运行时,才能正常运行

时间:2017-01-05 17:11:05

标签: c# powershell exchange-server

我正在尝试对我们的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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题在于密码,以及如何将其存储为安全字符串。

安全字符串在计算机之间是不同的,因为用于加密/解密密码的加密密钥在每台计算机上都是不同的。

您需要使用共享密钥,或为要运行此计算机的每台计算机存储单独的安全字符串。

有关如何在计算机之间传递安全字符串的详细信息,请参阅我的更详细的答案:ConvertTo-SecureString gives different experience on different servers