2016-03-23 4 views
1

ユーザーが新しいユーザーをリクエストすると実行されるスクリプトがあります。C#ASP.NET - アクティブなユーザーと中断されたユーザーを検索する

このスクリプトでは、ユーザーから提供されたユーザー名が使用され、ADが存在するかどうかを調べます。これは絶対にうまくいきますが、私たちのIT部門は期限切れのアカウントを持っています。これにより、アカウントは、退職したスタッフの別のOUに移動されるまで、無効ではなく、何らかの種類の「一時停止」状態になります。

C#AD検索では、これらの中断されたアカウントを無視しています。

誰もがこの問題に遭遇しましたか?あるいは、検索にこれらのユーザーを対応させる方法について誰かが手掛かりを持っていますか?

public static string ADSearch(string ADPart, string Alias) 
{ 
    System.DirectoryServices.DirectoryEntry dirEntry = default(System.DirectoryServices.DirectoryEntry); 
    System.DirectoryServices.DirectorySearcher dirSearcher = default(System.DirectoryServices.DirectorySearcher); 
    try 
    { 
     dirEntry = new System.DirectoryServices.DirectoryEntry("LDAP://LDAP DETAILS HERE"); 

     dirSearcher = new System.DirectoryServices.DirectorySearcher(dirEntry); 
     dirSearcher.Filter = "(samaccountname=" + Alias + ")"; 

     dirSearcher.PropertiesToLoad.Add("GivenName"); 
     //Users first name 
     dirSearcher.PropertiesToLoad.Add("sn"); 
     //Users last name 
     dirSearcher.PropertiesToLoad.Add("mail"); 
     //Users e-mail 
     dirSearcher.PropertiesToLoad.Add("samaccountname"); 
     //Samaccount 
     StringBuilder groupNames = new StringBuilder(); //stuff them in | delimited 


     SearchResult sr = dirSearcher.FindOne(); 
     //return false if user isn't found 


     if (sr != null) 
      if (ADPart == "GivenName") 
       return sr.Properties["GivenName"][0].ToString().Replace("'", ""); 
      else if (ADPart == "sn") 
       return sr.Properties["sn"][0].ToString().Replace("'", ""); 
      else if (ADPart == "mail") 
       return sr.Properties["mail"][0].ToString().Replace("'", ""); 
      else if (ADPart == "alias") 
       return sr.Properties["samaccountname"][0].ToString().Replace("'", ""); 
      else 
       return null; 
     else 
      return null; 

     // return false if exception occurs 
    } 
    catch (Exception ex) 
    { 
     return ex.Message; 
    } 
} 

私はこのコードを書いていないことに気付くかもしれませんが、それは既に存在していました。

ご迷惑をおかけして申し訳ありません。

答えて

0

ここでは、あなたに適したコードがいくつかあります。

まず、あなたはアカウントが期限切れになったかどうかを確認するためにこれを使用することができ、PropertiesToLoadに「accountExpires」を追加します。

var isExpired = false; 
if (sr.Properties.Contains("accountExpires")) { 
    var expiry = (long)sr.Properties["accountExpires"][0]; 
    if (!expiry.Equals(9223372036854775807) && !expiry.Equals(0)) { 
     isExpired = DateTime.FromFileTime(expiry) <= DateTime.Now; 
    } 
} 

マジックナンバーが0の値または0x7FFFFFFFFFFFFFFF(」、the documentation statesとして、ためています9223372036854775807)は、アカウントが期限切れにならないことを示します。

+0

こんにちはGabriel、ありがとうございました。あなたは確かにあなたが話していることを知っている。残念ながら、これはクエリに期限切れのアカウントがまったく表示されないため、私のニーズに合わないため、カウントできません。再度、感謝します! –

+0

この特定の検索は、「(samaccountname = "+ Alias +")」に基づいて、一度に1つのアカウントのみを検索しています。だから、このメソッドにアカウント名を与えるのは何ですか? –

+0

管理者がユーザー名を入力できるテキストボックスがあります。彼らが入力したものはすべて検索に使用されます。 –

関連する問題