PowerShell Get-ChildItem在C#

时间:2015-12-04 10:29:43

标签: c# powershell c#-4.0

我将以下powershell脚本转换为C#。

$file = $solution.DisplayName.substring(0, $solution.DisplayName.Length - 4) + ".dll"
Get-ChildItem "C:\Windows\Microsoft.NET\assembly" -Filter $file -Recurse | Select-Object -ExpandProperty VersionInfo

我尝试过这个但是没能成功。

        string dllName = "MyOwn.dll";
        PowerShell ps = PowerShell.Create();
        ps.AddCommand("Get-ChildItem");
        ps.AddParameter(@"C:\Windows\Microsoft.NET\assembly");
        ScriptBlock filter = ScriptBlock.Create(dllName);
        ps.AddParameter("-Filter", filter);
        foreach (PSObject result in ps.Invoke())
        {
            Console.WriteLine(
                "{0,-24}{1}",
                result.Members["Length"].Value,
                result.Members["Name"].Value);
        } 

C#中是否有任何等效的Get-ChildItem?

请帮忙。

感谢。

1 个答案:

答案 0 :(得分:1)

我知道这是一个相当古老的问题,但因为它没有答案,而且与我刚刚回答的a new one有关,我想我也可以解决这个问题。我发现它的方式是执行一个" Get-ChildItem"是,而不是使用PowerShell.Create()使用RunspaceInvoke而不是按原样抛出命令。以下是它如何适用于这种情况:

using (RunspaceInvoke invoke = new RunspaceInvoke())
{
       Collection<PSObject> result = invoke.Invoke("Get-ChildItem \"C:\\Windows\\Microsoft.NET\\assembly\" -Filter \"Microsoft.GroupPolicy.Management.Interop.dll\" -Recurse | Select-Object -ExpandProperty VersionInfo");
}