1

ActiveDirectory にユーザーを作成する ASP.NET Web アプリケーションを作成しましたが、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 は通常、asp.net 1.1 または 2.0 からのような古い .net Web アプリ用です。

ところで、エラー番号とメッセージと説明とは何ですか?

于 2012-11-01T20:41:51.993 に答える