PowerShell Get-ChildItem在C#中调用

本文关键字:调用 Get-ChildItem PowerShell | 更新日期: 2023-09-27 18:25:41

下面的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等价物吗?

请帮忙。

谢谢。

PowerShell Get-ChildItem在C#中调用

我知道这是一个相当古老的问题,但由于它没有答案,而且与我刚刚回答的一个新问题有关,我想我也可以解决这个问题。我发现执行"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");
}