通过C#中的属性检索嵌套的Powershell对象的值
发布时间:2020-12-15 22:32:12 所属栏目:百科 来源:网络整理
导读:C#新手在这里.我不确定我的目标是否可行. 基本上,我试图在C#中的Power shell对象中读取系统对象数组的属性. 为简单起见,这是一个具有类似输出的基本Powershell代码: $object = New-Object -TypeName PSObject$object | Add-Member -MemberType NoteProperty
C#新手在这里.我不确定我的目标是否可行.
基本上,我试图在C#中的Power shell对象中读取系统对象数组的属性. 为简单起见,这是一个具有类似输出的基本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:ScriptsPowershellTestScript.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; } 有了这个,’userProfile’对象相当于Powershell输出. 现在,’MachineServices’属性是一个对象,它包含自己的一组属性(Powershell中的状态,名称和显示名称).是否可以调用这些属性并检索它们的值? 我尝试了类似于下面的内容,当然,我得到一个错误,因为Powershell脚本是完全独立的,并且运行时之前C#代码不知道这些属性. userProfile.MachineServices.Status 有任何想法吗? 解决方法
如果您使用.GetType()调查PowerShell中的Get-Service,您会发现它返回一个Object数组,其中成员的类型为ServiceController.
我没有在C#中尝试过,但你应该能够将Profile.MachineServices声明为System.ServiceProcess.ServiceController [],然后使用赋值 userProfile.MachineServices= (System.ServiceProcess.ServiceController[])(psObject.Properties["Machine Services"].Value); 一旦C#知道正确的对象类型,您就可以访问属性和方法,获取IntelliSense等等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |