我在C#中构建一个可以运行PowerShell命令的应用程序。目前我处于将用户属性变为PSObject
的阶段。
我想从用户属性中获取具体细节,但我不知道如何。
问题是在cmdlet中我有属性BaseObject
,在其中我有属性GivenName
和Surname
。
我想将GivenName
纳入参数,但我不知道参数是什么类型。我试着“复制表达”,然后收到了:
((Microsoft.ActiveDirectory.Management.ADUser)(cmdlet.BaseObject)).GivenName
但它不被承认。
没有这样的课程:
Microsoft.ActiveDirectory.Management.ADUser
您是否知道如何将GivenName
属性纳入参数?
答案 0 :(得分:1)
我有点不确定你的意思是将值GivenName放入参数中。如果您只想从结果中获得给定名称,那么很容易获得。
var givenName = cmdlet.Properties["GivenName"].Value;
如果您希望获得所有属性,则可以在PSMemberInfoCollection
PSMemberInfoCollection<PSPropertyInfo> props = psObject.Properties;
props.ToList().ForEach(x => {
Console.WriteLine("Name: {0}, Value: {1}", x.Name,x.Value);
});
如果您要将PSObject
转换为ADUser
,则必须在c#sharp代码中加载程序集Microsoft.ActiveDirectory.Management
,然后从{{1}创建ADUser实例}}
<强> EDIT1:强>
因此,如果您想通过索引获取组或特定组。再次,这纯粹基于黑客攻击。请谨慎使用所有代码。无论如何,你可以使用动态关键字做一些有趣的事情。首先,您可以获得PSObject
属性。然后你的MemberOf属性将为你提供一个类型为Collection的ValueList,你可以通过索引获取属性,或者你可以枚举所有可用的属性。
GivenName
答案 1 :(得分:0)
在Powershell中,您是否记得在运行命令之前反映程序集。
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.ActiveDirectory.Management');((Microsoft.ActiveDirectory.Management.ADUser)(cmdlet.BaseObject)).GivenName