【问题标题】:Retrieving the values of a nested Powershell object via properties in C#通过 C# 中的属性检索嵌套 Powershell 对象的值
【发布时间】:2016-10-16 11:41:39
【问题描述】:

这里是 C# 新手。我不确定我的目标是否可能。 基本上,我试图在 C# 中读取系统对象数组 within 的 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;
         }

这样,“userProfile”对象就等同于 Powershell 输出。

现在,“MachineServices”属性是一个对象,它包含自己的一组属性(Powershell 中的状态、名称和显示名称)。是否可以调用这些属性并检索它们的值?

我尝试了类似于下面的方法,但当然,我得到了一个错误,因为 Powershell 脚本是完全独立的,并且在运行时之前 C# 代码不知道这些属性。

userProfile.MachineServices.Status

有什么想法吗?

【问题讨论】:

    标签: c# arrays list powershell object


    【解决方案1】:

    如果您在 PowerShell 中使用 .GetType() 调查 Get-Service,您会发现它返回一个 Object 数组,其中成员的类型为 ServiceController

    我没有在 C# 中尝试过,但你应该可以将 Profile.MachineServices 声明为 System.ServiceProcess.ServiceController[] 然后使用赋值

    userProfile.MachineServices= (System.ServiceProcess.ServiceController[])(psObject.Properties["Machine Services"].Value);
    

    一旦 C# 知道正确的对象类型,您就可以访问属性和方法,获取 IntelliSense 等等。

    【讨论】:

    • 谢谢托尼。看到这个有点太晚了,已经收拾了一天。明天我会先试试这个,然后告诉你进展如何。
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2015-10-25
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多