Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过C中的属性检索嵌套Powershell对象的值#_C#_Arrays_List_Powershell_Object - Fatal编程技术网

C# 通过C中的属性检索嵌套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

这里是新手。我不确定我所追求的是否可能。 基本上,我试图读取C#中Powershell对象中系统对象数组的属性

为简单起见,下面是一个具有类似输出的基本Powershell代码:

$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);