如何将GivenName属性转换为参数

时间:2014-02-03 15:46:26

标签: c# powershell c#-3.0 powershell-v2.0

我在C#中构建一个可以运行PowerShell命令的应用程序。目前我处于将用户属性变为PSObject的阶段。

我想从用户属性中获取具体细节,但我不知道如何。

enter image description here

问题是在cmdlet中我有属性BaseObject,在其中我有属性GivenNameSurname

我想将GivenName纳入参数,但我不知道参数是什么类型。我试着“复制表达”,然后收到了:

((Microsoft.ActiveDirectory.Management.ADUser)(cmdlet.BaseObject)).GivenName

但它不被承认。

  

没有这样的课程:
  Microsoft.ActiveDirectory.Management.ADUser

您是否知道如何将GivenName属性纳入参数?

2 个答案:

答案 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