1

我构建了一个 ASP.NET Webapllication,它在我们的 ActiveDirectory 中创建了一个用户,但是如果我将它安装在 IIS7 上,我会收到一个错误,没有在广告中添加用户的权限。现在我想创建一个可以做到这一点的服务,但我有同样的问题。该命令是一个 Powershell 命令,我已经为 ActiveDirectory 安装了模块。

这里有一些关于我的项目的信息:

我的 asmx 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Security;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Management.Automation.Remoting;
using System.Security;
using System.Security.Cryptography;
using System.IO;

namespace ActiveDirectoryService
{
    /// <summary>
    /// Zusammenfassungsbeschreibung für Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Um das Aufrufen dieses Webdiensts aus einem Skript mit ASP.NET AJAX zuzulassen, heben Sie die Auskommentierung der folgenden Zeile auf. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public string Connectiontest()
        {
            return "Die Verbindung besteht";
        }

        [WebMethod]
        public string GetUsername()
        {
            return User.Identity.Name;
        }

        [WebMethod]
        public string CreateADUserInNPS(string macAdress)
        {
            string prefix = "test";
            string principlename = macAdress + "@company-test.com";
            string gn = "test";
            string sn = "test";
            string Path = "..."; //The path is correct but I don't want show this

            return AddNewUser(prefix, macAdress, principlename, gn, sn, Path);

        }

        public string AddNewUser(string prefix, string macAdress, string principlename, 
                               string gn, string sn, string path)
        {
            SecureString SECUREADADMINPASSWORD = new SecureString();

            foreach (char x in macAdress)
            {
                SECUREADADMINPASSWORD.AppendChar(x);
            }

            InitialSessionState initial = InitialSessionState.CreateDefault();
            Environment.SetEnvironmentVariable("ADPS_LoadDefaultDrive", "0");
            initial.ImportPSModule(new string[] { "ActiveDirectory" });

            using (Runspace runspace = RunspaceFactory.CreateRunspace(initial))
            {
                runspace.Open();
                using (Pipeline p = runspace.CreatePipeline())
                {
                    Command command = new Command("New-ADUser");
                    command.Parameters.Add("Name", prefix);
                    command.Parameters.Add("sAMAccountName", macAdress);
                    command.Parameters.Add("UserPrincipalName", principlename);
                    command.Parameters.Add("GivenName", gn);
                    command.Parameters.Add("SurName", sn);
                    command.Parameters.Add("displayname", macAdress);
                    command.Parameters.Add("enabled", true);
                    command.Parameters.Add("Path", path);
                    command.Parameters.Add("AllowReversiblePasswordEncryption", true);
                    command.Parameters.Add("PasswordNeverExpires", true);
                    command.Parameters.Add("AccountPassword", SECUREADADMINPASSWORD);
                    p.Commands.Add(command);

                    string pscommand = "New-ADUser " + prefix + " -SamAccountName " + macAdress +
                    " -UserPrincipalName " + macAdress + "@company-test.com -GivenName " + gn + // @company-test.com aus cfg
                    " -SurName " + sn + " -displayname " + macAdress + " -enabled $true -Path " + path +
                    " -AllowReversiblePasswordEncryption $true -PasswordNeverExpires $true -AccountPassword (ConvertTo-Securestring" +
                    " '" + macAdress + "'" + " -asplaintext -Force)";

                    try
                    {
                        p.Invoke();   //I think here comes the Error with not the rights
                        return "erfolg";
                    }
                    catch (Exception ex)
                    {
                        return "Meldung: " + ex.Message;
                    }
                }
            }
        }
    }
}

在我的客户端上它可以工作,但如果我在 IIS7 上安装它就不行。

我的aspx代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ActiveDirectoryCenter.serv;

namespace ActiveDirectoryCenter
{
    public partial class main : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnConnectionTest_Click(object sender, EventArgs e)
        {
            serv.Service1 service = new Service1();
            service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            lblConnection.Text = service.Connectiontest();
        }

        protected void btnGetUsername_Click(object sender, EventArgs e)
        {
            serv.Service1 service = new Service1();
            service.Credentials = System.Net.CredentialCache.DefaultCredentials;
            lblUsername.Text = service.GetUsername();
        }

        protected void btncreateADUser_Click(object sender, EventArgs e)
        {
            serv.Service1 service = new Service1();
            service.Credentials = System.Net.CredentialCache.DefaultCredentials;
            lblstatus.Text = service.CreateADUserInNPS(txtMacAdress.Text);

        }
    }
}

这里的想法

在此处输入图像描述

我首先在没有服务的情况下完成了它,但现在我想要一个 aspx 站点和一个具有这些方法的服务。我这样配置服务:

在此处输入图像描述 在此处输入图像描述

我知道这是一个困难的问题,但也许我会得到帮助:(

4

1 回答 1

1

只是想从我自己的经验中提供帮助。

service.Credentials = System.Net.CredentialCache.DefaultCredentials;

将其注释掉,如果失败,请找出要使用的凭据。

那是在您的网络客户端中。

别的东西:拥有自己的 iis 应用程序池。

  1. 你自己
  2. 当涉及到应用程序池模式时,您需要确定它应该是经典的 .net 还是集成的。经典 .net 通常用于旧的 .net Web 应用程序,例如来自 asp.net 1.1 或 2.0。

顺便问一下,错误号和消息和描述等是什么?

于 2012-11-01T20:41:51.993 回答