C#新手在这里.我不确定我的目标是否可行.
基本上,我试图在C#中的Power shell对象中读取系统对象数组的属性.
基本上,我试图在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
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; }
有了这个,’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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。