在IIS Web服务器上使用PowerShell时访问被拒绝

时间:2012-05-25 15:43:38

标签: c# asp.net powershell

我的0ffice 365用户有一个密码重置网站。它在后台运行powershell命令以重置用户密码。出于某种原因,当我使用VS并且我使用页面运行浏览器时它工作正常。但是,当我从实际网站运行它时,我收到此错误

Processing data from remote server failed with the following error message: Access is denied. For more information, see the about_Remote_Troubleshooting Help topic. 

页面是aspx.net,后面有C#代码。

我已尝试使用模仿类,但这也不起作用。

以下是我的一些代码。

 using (new Impersonator("user", "domain", "pass"))
    {

        PSCredential creds = new PSCredential("office365email", "password");

        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
            new Uri("https://server.outlook.com/PowerShell-LiveID?PSVersion=2.0"),
            "http://schemas.microsoft.com/powershell/Microsoft.Exchange", creds);
        connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;



        Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);

        runspace.ApartmentState = System.Threading.ApartmentState.STA;
        runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;

        try
        {


            runspace.Open();


            pipeline = runspace.CreatePipeline();

            Command forwardcommand = new Command("Set-Mailbox");
            forwardcommand.Parameters.Add("Identity", user);
            forwardcommand.Parameters.Add("Password", pass);




            pipeline.Commands.Add(forwardcommand);

            try
            {
                pipeline.Invoke();



                runspace.Close();
                pipeline.Stop();
                return "Password Successfully Changed";



            }
            catch (Exception er)
            {
                runspace.Close();
                pipeline.Stop();

                return er.Message;


            }
        }
        catch (PSRemotingTransportException eer)
        {

            runspace.Close();


            return eer.Message;// "Server busy please try again later";
        }
    }

为什么我不能从实际的网站上做到这一点,但我可以在我的本地主机上做任何想法?

<authentication mode="Windows"/>
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
        <providers>
            <clear/>
            <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider"/>
            <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider"/>
        </providers>
    </roleManager>
    <identity impersonate="true"/>

2 个答案:

答案 0 :(得分:2)

在IIS中,我将ApplicationPoolIdentity更改为LocalService。这样可以解决运行已发布的Visual Studio网站时访问被拒绝的错误,并且该网站可以在发布前正常运行。

答案 1 :(得分:1)

这可能是“双跳”身份/安全问题。

在localhost上运行时,Windows身份在同一台计算机上已知 在Web服务器上运行时,至少还有一台计算机。

相关问题包括:IIS用于运行网页的身份是什么?该ID是否具有使用网络的权限?该ID是否具有在远程服务器上执行密码重置的权限?