C# 在C中使用PSObject进行迭代#

C# 在C中使用PSObject进行迭代#,c#,powershell,C#,Powershell,我试图获取实例属性的值 但它总是给我零例外 我使用的代码如下 var xs = PowerShell.Create() .AddScript("Get-ADComputer -Identity COM-PC-003$ -Properties * | select operatingsystem, accountexpires") .AddCommand("out-string"); Collection<PSObject> results = xs.I

我试图获取实例属性的值

但它总是给我零例外

我使用的代码如下

var xs = PowerShell.Create()
        .AddScript("Get-ADComputer -Identity COM-PC-003$ -Properties * | select operatingsystem, accountexpires")
        .AddCommand("out-string");
Collection<PSObject> results = xs.Invoke();
//Console.WriteLine(xs);
foreach (var str in results)
{
    Console.WriteLine(str.Members["operatingsystem"].Value.ToString());
    Console.ReadLine();
    //System.Diagnostics.Debug.WriteLine(str.Properties["operatingsystem"].Value);
}
var xs=PowerShell.Create()
.AddScript(“获取ADComputer-Identity COM-PC-003$-Properties*|选择operatingsystem,accountexpires”)
.AddCommand(“输出字符串”);
收集结果=xs.Invoke();
//控制台写入线(xs);
foreach(结果中的var str)
{
Console.WriteLine(str.Members[“operatingsystem”].Value.ToString());
Console.ReadLine();
//System.Diagnostics.Debug.WriteLine(str.Properties[“operatingsystem”].Value);
}

如何解决此问题?

您可以尝试执行以下操作:

while (true) {
    Console.WriteLine("Enter Hostname");
    var hn = Console.ReadLine();
    var xs = PowerShell.Create().AddScript(
               "$comp = Get-ADComputer -Identity " + hn +
               " -Properties *" + Environment.NewLine +
               "$obj = New-Object -TypeName psobject" +
               " -Property @{Host=$comp.operatingsystem;accountexpires = $comp.accountexpires}" +
               Environment.NewLine +
               "$obj1 = $obj | select -ExpandProperty Host ; $obj2 = $obj | select -ExpandProperty accountexpires ; $out = $obj1 + ' ; ' + $obj2 ; $out").AddCommand("out-string");
    Collection<PSObject> results = xs.Invoke();
    //Console.WriteLine(xs);
    foreach (var str in results)
    {
        Console.WriteLine("You want to see only OS vers? If its true - enter H, also enter E for see accountexpires or A for see all info");
        ConsoleKeyInfo c = Console.ReadKey();

        if (c.KeyChar == 'H')
        {
             Console.WriteLine(str.ToString().Split(';')[0]);
             Console.ReadLine();
        }

        if (c.KeyChar == 'E')
        {
             Console.WriteLine(str.ToString().Split(';')[1]);
             Console.ReadLine();
        }

        if (c.KeyChar == 'A')
        {
            Console.WriteLine(str.ToString());
            Console.ReadLine();
        }
    }
}
while(true){
Console.WriteLine(“输入主机名”);
var hn=Console.ReadLine();
var xs=PowerShell.Create().AddScript(
“$comp=Get ADComputer-Identity”+hn+
“-Properties*”+Environment.NewLine+
“$obj=新对象-类型名称psobject”+
“-Property@{Host=$comp.operatingsystem;accountexpires=$comp.accountexpires}”+
环境新线+
“$obj1=$obj |选择-ExpandProperty主机;$obj2=$obj |选择-ExpandProperty帐户过期;$out=$obj1+';'+$obj2;$out”).AddCommand(“输出字符串”);
收集结果=xs.Invoke();
//控制台写入线(xs);
foreach(结果中的var str)
{
WriteLine(“您只想查看操作系统版本?如果为真-输入H,也输入E以查看accountexpires或A以查看所有信息”);
ConsoleKeyInfo c=Console.ReadKey();
如果(c.KeyChar=='H')
{
Console.WriteLine(str.ToString().Split(“;”)[0]);
Console.ReadLine();
}
如果(c.KeyChar=='E')
{
Console.WriteLine(str.ToString().Split(“;”)[1]);
Console.ReadLine();
}
如果(c.KeyChar=='A')
{
Console.WriteLine(str.ToString());
Console.ReadLine();
}
}
}

您可以尝试执行以下操作:

while (true) {
    Console.WriteLine("Enter Hostname");
    var hn = Console.ReadLine();
    var xs = PowerShell.Create().AddScript(
               "$comp = Get-ADComputer -Identity " + hn +
               " -Properties *" + Environment.NewLine +
               "$obj = New-Object -TypeName psobject" +
               " -Property @{Host=$comp.operatingsystem;accountexpires = $comp.accountexpires}" +
               Environment.NewLine +
               "$obj1 = $obj | select -ExpandProperty Host ; $obj2 = $obj | select -ExpandProperty accountexpires ; $out = $obj1 + ' ; ' + $obj2 ; $out").AddCommand("out-string");
    Collection<PSObject> results = xs.Invoke();
    //Console.WriteLine(xs);
    foreach (var str in results)
    {
        Console.WriteLine("You want to see only OS vers? If its true - enter H, also enter E for see accountexpires or A for see all info");
        ConsoleKeyInfo c = Console.ReadKey();

        if (c.KeyChar == 'H')
        {
             Console.WriteLine(str.ToString().Split(';')[0]);
             Console.ReadLine();
        }

        if (c.KeyChar == 'E')
        {
             Console.WriteLine(str.ToString().Split(';')[1]);
             Console.ReadLine();
        }

        if (c.KeyChar == 'A')
        {
            Console.WriteLine(str.ToString());
            Console.ReadLine();
        }
    }
}
while(true){
Console.WriteLine(“输入主机名”);
var hn=Console.ReadLine();
var xs=PowerShell.Create().AddScript(
“$comp=Get ADComputer-Identity”+hn+
“-Properties*”+Environment.NewLine+
“$obj=新对象-类型名称psobject”+
“-Property@{Host=$comp.operatingsystem;accountexpires=$comp.accountexpires}”+
环境新线+
“$obj1=$obj |选择-ExpandProperty主机;$obj2=$obj |选择-ExpandProperty帐户过期;$out=$obj1+';'+$obj2;$out”).AddCommand(“输出字符串”);
收集结果=xs.Invoke();
//控制台写入线(xs);
foreach(结果中的var str)
{
WriteLine(“您只想查看操作系统版本?如果为真-输入H,也输入E以查看accountexpires或A以查看所有信息”);
ConsoleKeyInfo c=Console.ReadKey();
如果(c.KeyChar=='H')
{
Console.WriteLine(str.ToString().Split(“;”)[0]);
Console.ReadLine();
}
如果(c.KeyChar=='E')
{
Console.WriteLine(str.ToString().Split(“;”)[1]);
Console.ReadLine();
}
如果(c.KeyChar=='A')
{
Console.WriteLine(str.ToString());
Console.ReadLine();
}
}
}

如果在powershell中键入相同的命令,您是否看到任何输出?字符串没有
operatingsystem
属性。请删除
.AddCommand(“输出字符串”)
如果在powershell中键入相同的命令,您是否看到任何输出?字符串没有
operatingsystem
属性。请删除
.AddCommand(“输出字符串”)