10. 属性の出力サンプル(VB)
Private Sub OutputProperties(entry As DirectoryEntry, filePath As
String)
Dim props = entry.Properties.PropertyNames.Cast(
Of String)().OrderBy(Function(s) s).ToList() 'プロパティ名のリス
ト
Using writer As New StreamWriter(filePath, False, Encoding.UTF8)
For Each pname In props 'プロパティ数分
Dim val = entry.Properties.Item(pname).Value
If TypeOf val Is Byte() Then 'バイト配列の時
Dim pstr = GetByteValue(pname, DirectCast(val, Byte())) '値取
得
writer.WriteLine("{0}:{1}", pname, pstr)
Else 'バイト配列以外の時
For Each pval In entry.Properties.Item(pname) '値数分
writer.WriteLine("{0}:{1}", pname, pval)
Next
End If
Next
End Using 10
11. 属性の出力サンプル(C#)
private void OutputProperties(DirectoryEntry entry, string filePath) {
var props = entry.Properties.PropertyNames.Cast<string>().OrderBy(
s => s).ToList(); //プロパティ名のリスト
using (var writer = new StreamWriter(filePath, false, Encoding.UTF8)) {
foreach (var pname in props) { //プロパティ数分
var val = entry.Properties[pname].Value;
if (val is byte[]) { //バイト配列の時
var pstr = GetByteValue(pname, (byte[])val); //値取得
writer.WriteLine("{0}:{1}", pname, pstr);
} else { //バイト配列以外の時
foreach (var pval in entry.Properties[pname]) { //値数分
writer.WriteLine("{0}:{1}", pname, pval)
}
}
}
}
}
11
12. オプションの属性の出力サンプル(VB)
Private Sub OutputOptionalProperties(
entry As DirectoryEntry, filePath As String)
Dim adsi = DirectCast(entry.NativeObject, IADs) 'ADSI オブジェクト
Dim schema = DirectCast(entry.SchemaEntry.NativeObject, IADsClass)
Dim val As Object
Using writer As New StreamWriter(filePath, False, Encoding.UTF8)
'プロパティの値を読込
adsi.GetInfoEx(DirectCast(schema.OptionalProperties, Object()), 0)
For Each pname As String In DirectCast(schema.OptionalProperties,
IEnumerable) 'オプションのプロパティ数分
Try
val = adsi.GetEx(pname)
Catch
writer.WriteLine("{0}:<未設定>", pname)
Continue For
End Try
12
13. オプションの属性の出力サンプル(VB)
If TypeOf val Is Byte() Then 'バイト配列の時
Dim bstr = BitConverter.ToString(DirectCast(val, Byte()))
writer.WriteLine("{0}:{1}", pname, bstr)
Else 'バイト配列以外の時
For Each pval In DirectCast(val, IEnumerable) '値数分
If TypeOf pval Is Byte() Then 'バイト配列の時
'値取得
Dim pstr = GetByteValue(pname, DirectCast(pval, Byte()))
writer.WriteLine("{0}:{1}", pname, pstr)
Else 'バイト配列以外の時
writer.WriteLine("{0}:{1}", pname, pval)
End If
Next
End If
Next
End Using
End Sub
13
14. オプションの属性の出力サンプル(C#)
private void OutputOptionalProperties(
DirectoryEntry entry, string filePath) {
var adsi = (IADs)entry.NativeObject; //ADSI オブジェクト
var schema = (IADs)entry.SchemaEntry.NativeObject;
object val;
using (var writer = new StreamWriter(filePath, false, Encoding.UTF8))
{
//プロパティの値を読込
adsi.GetInfoEx((object[])schema.OptionalProperties, 0);
//オプションのプロパティ数分
foreach (string pname in (IEnumerable)schema.OptionalProperties) {
try {
val = adsi.GetEx(pname);
} catch {
writer.WriteLine("{0}:<未設定>", pname);
continue;
}
14
15. オプションの属性の出力サンプル(C#)
if (val is byte[]) { //バイト配列の時
var bstr = BitConverter.ToString((byte[])val);
writer.WriteLine("{0}:{1}", pname, bstr);
} else { //バイト配列以外の時
foreach (var pval in (IEnumerable)val) { //値数分
if (pval is byte[]) { //バイト配列の時
var pstr = GetByteValue(pname, (byte[])val); //値取得
writer.WriteLine("{0}:{1}", pname, pstr);
} else { //バイト配列以外の時
writer.WriteLine("{0}:{1}", pname, pval)
}
}
}
}
}
}
15
16. バイト配列の値取得サンプル(VB)
Private Function GetByteValue(
name As String, value As Byte()) As String
If name.Equals("objectSid") Then
Return New SecurityIdentifier(value, 0).ToString()
ElseIf name.Equals("objectGUID") Then
Return New Guid(value).ToString()
Else
Return BitConverter.ToString(value)
End If
End Function
16
17. バイト配列の値取得サンプル(C#)
private string GetByteValue(string name, byte[] value)
{
if (name.Equals("objectSid"))
{
return new SecurityIdentifier(value, 0).ToString();
}
else if (name.Equals("objectGUID"))
{
return new Guid(value).ToString();
}
else
{
return BitConverter.ToString(value);
}
}
17