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

C# 访问被拒绝运行远程PowerShell,但仅当从开发服务器运行时,在本地工作正常,c#,powershell,exchange-server,C#,Powershell,Exchange Server,我正试图对exchange服务器运行远程PowerShell命令,但从开发服务器运行该命令时,我收到了一个访问被拒绝错误。当我在本地机器上运行代码时,代码运行良好,我甚至可以远程到开发服务器并运行PowerShell命令,使连接完全正常。我需要帮助来弄清楚为什么只有从开发服务器运行代码时才会出现访问被拒绝的错误 public static void CreateEmailBox(string samAccountName) { var securedPassword = new Secu

我正试图对exchange服务器运行远程PowerShell命令,但从开发服务器运行该命令时,我收到了一个
访问被拒绝
错误。当我在本地机器上运行代码时,代码运行良好,我甚至可以远程到开发服务器并运行PowerShell命令,使连接完全正常。我需要帮助来弄清楚为什么只有从开发服务器运行代码时才会出现
访问被拒绝的错误

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();
        }
    }
}

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

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

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


有关如何在计算机之间传递安全字符串的详细信息,请参阅我的更详细的回答:

是否启用了远程powershell?我可以在本地计算机上运行此代码,没有问题,因此我相信它已启用,只有当我将代码部署到开发服务器时,它才会连接失败。但是,如果您在远程计算机上使用该代码,则没有“remove Powershell”,或者我无法理解您的设置。哪一行引发了错误<代码>运行空间.Open()
<代码>powershell.Invoke()?或者是
powershell.Invoke()
Enable Mailbox
返回该错误?@BaconBits在错误日志中的挖掘看起来像是在
runspace.Open()