c#中的powershell cmdlet-如何访问ProcessRecord中的AD对象
我正在用C#编写一个Powershell模块。某些cmdlet处理来自Microsofts AD Powershell模块的输入。我喜欢在Powershell中做这样的事情:c#中的powershell cmdlet-如何访问ProcessRecord中的AD对象,c#,powershell,cmdlets,C#,Powershell,Cmdlets,我正在用C#编写一个Powershell模块。某些cmdlet处理来自Microsofts AD Powershell模块的输入。我喜欢在Powershell中做这样的事情: Get-ADUser MyUser | New-MyCmdlet 因此,AD用户“MyUser”被传递到我的Cmdlet“New MyCmdlet”。MyUser的类型为Microsoft.ActiveDirectory.Management.ADUser c#类将如下所示: namespace MyCmdlet { [
Get-ADUser MyUser | New-MyCmdlet
因此,AD用户“MyUser”被传递到我的Cmdlet“New MyCmdlet”。MyUser的类型为Microsoft.ActiveDirectory.Management.ADUser
c#类将如下所示:
namespace MyCmdlet
{
[Cmdlet(VerbsCommon.New, "MyAdUserOperation")]
public class NewAdUserOperationCmdlet : Cmdlet
{
[Parameter(
Mandatory = true,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true,
HelpMessage = "ADUser object from AD to be stored on database.")]
public object AdUser { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
if (AdUser != null)
{
// do something with the props, e.g:
// var dn = AdUser.DistinguishedName;
// var pwLastSet = AdUser.PasswordLastSet
// etc.....
}
}
}
}
我声明了类型为object
的输入参数,因为我不知道如何在项目中获取ADUser
。所以我可以在调试器中看到更多。。。。注释代码显示了我想要做的事情
- 问题1:我找不到Microsoft.ActiveDirectory.Management.ADUser的程序集。我需要在我的项目中添加什么
- 问题2:如果没有程序集,如何访问此ADUser对象的所有属性?在VS 2015的调试器中,我可以看到所有道具,甚至所有扩展道具。但我如何才能访问它们
PSObject
或PSCustomObject
。看
这些类有很好的集合,名为成员
和属性
,可以迭代
对于我的上述样本,我做了以下工作:
public PSObject AdUser{get;set;}
AdUser.Properties
,以发现其中的内容
if (AdUser != null)
{
List<string> strList = new List<string>();
var userProps = AdUser.Properties;
foreach (var prop in userProps)
{
string data = String.Format("property: {0} | value: {1}", prop.Name, prop.Value.ToString());
strList.Add(data);
}
WriteObject(strList);
}
if(AdUser!=null)
{
List strList=新列表();
var userProps=AdUser.Properties;
foreach(userProps中的var prop)
{
string data=string.Format(“属性:{0}|值:{1}”,prop.Name,prop.value.ToString());
添加(数据);
}
WriteObject(strList);
}
System.Management.Automation
程序集的一部分,在用C编写cmdlet时,这是必需的#