访问被拒绝运行远程 PowerShell,但仅当从开发服务器运行时,在本地工作正常



我正在尝试对我们的交换服务器运行远程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();
        }
    }
}

问题出在密码上,以及它如何存储为安全字符串。

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

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

有关如何在计算机之间传递安全字符串的更多信息,请参阅我更详细的答案:转换为安全字符串在不同的服务器上提供不同的体验

最新更新