C# 通过C中的属性检索嵌套Powershell对象的值#
这里是新手。我不确定我所追求的是否可能。 基本上,我试图读取C#中Powershell对象中系统对象数组的属性 为简单起见,下面是一个具有类似输出的基本Powershell代码:C# 通过C中的属性检索嵌套Powershell对象的值#,c#,arrays,list,powershell,object,C#,Arrays,List,Powershell,Object,这里是新手。我不确定我所追求的是否可能。 基本上,我试图读取C#中Powershell对象中系统对象数组的属性 为简单起见,下面是一个具有类似输出的基本Powershell代码: $object = New-Object -TypeName PSObject $object | Add-Member -MemberType NoteProperty -Name "Name" -Value "Yad" $object | Add-Member -MemberType NoteProperty -N
$object = New-Object -TypeName PSObject
$object | Add-Member -MemberType NoteProperty -Name "Name" -Value "Yad"
$object | Add-Member -MemberType NoteProperty -Name "Title" -Value "C# Noob"
$object | Add-Member -MemberType NotePropety -Name "Machine Services" -Value (Get-Service)
return $object
在C#方面,我可以通过映射以下属性来获取结果:
var shell = PowerShell.Create();
shell.Commands.AddScript("C:\\Scripts\\Powershell\\TestScript.ps1 -user " + userName);
Collection<PSObject> results = shell.Invoke();
Profile userProfile = new Profile(); //Profile class is declared prior this line
foreach (PSObject psObject in results)
{
userProfile.Name = Convert.ToString(psObject.Properties["Name"].Value);
userProfile.Title= Convert.ToString(psObject.Properties["Title"].Value);
userProfile.MachineServices= psObject.Properties["Machine Services"].Value;
}
有什么想法吗?如果您使用
.GetType()
在PowerShell中调查获取服务
,您会发现它返回一个对象
数组,其中成员的类型为服务控制器
我没有在C#中尝试过,但您应该能够将Profile.MachineServices
声明为System.ServiceProcess.ServiceController[]
,然后使用分配
userProfile.MachineServices= (System.ServiceProcess.ServiceController[])(psObject.Properties["Machine Services"].Value);
一旦C#知道了正确的对象类型,您就可以访问属性和方法,获取IntelliSense等等。谢谢Toni。看到这个有点太晚了,今天已经收拾好行李了。我明天第一件事就是试试这个,让你知道它是怎么回事。
userProfile.MachineServices= (System.ServiceProcess.ServiceController[])(psObject.Properties["Machine Services"].Value);