A は、Active Directory スキーマにカスタム属性を追加しました。あるマシンで属性をクエリしようとすると、コードからエラーが返されます。
これをテストするための C# バージョンを次に示します。
static class Program
{
static void Main()
{
Console.ReadLine();
DirectoryEntry directoryEntry = (DirectoryEntry)UserPrincipal.Current.GetUnderlyingObject();
//Execption on this line
var allowedDatabases = directoryEntry.Properties["vwDBAccess"];
foreach (var record in allowedDatabases.OfType<String>())
{
Console.WriteLine(record);
}
Console.ReadLine();
}
}
System.Runtime.InteropServices.COMException が処理されませんでした Message=不明なエラー (0x8000500c) Source=System.DirectoryServices エラーコード=-2147463156 スタックトレース: System.DirectoryServices.PropertyValueCollection.PopulateList() で System.DirectoryServices.PropertyValueCollection..ctor (DirectoryEntry エントリ、文字列 propertyName) で System.DirectoryServices.PropertyCollection.get_Item (文字列 propertyName) で C:\Users\srchamberlain.VW\documents\visual studio 2010\Projects\Sandbox Console\Sandbox Console\Program.cs:line 16 の Sandbox_Console.Program.Main() で 内部例外:
エラー コード0x8000500c
は を表しE_ADS_CANT_CONVERT_DATATYPE
ます。これは、1 台のマシンでのみ発生します。他に 3 台のコンピューター (すべて最初のコンピューターと同じドメインの一部) があり、まったく同じユーザーに対してまったく同じコードを実行し、属性の内容を与えると、それらは正しく動作します。また、同じボックスで別のユーザーとして実行しているが、悪いユーザーの属性を照会すると、別のユーザーとして接続したときに情報を正しく取得できます。
この KB 記事の手法を使用してボックスのスキーマを更新しようとしましたが、問題はまだ発生しています。
この 1 台のコンピューターで何が問題になっているのでしょうか?
説明:
vwDBAccess は複数値の文字列であるため、機能すると、項目が 1 つある場合、複数ある場合、および項目がない場合にdirectoryEntry.Properties["vwDBAccess"]
a が返されます。このアカウントには3つのアイテムが設定されています。別のユーザーとして実行し、悪いユーザーにクエリを実行すると、正しく返されます。string
sting[]
null
string[3]