我将以下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?
请帮忙。
感谢。
答案 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");
}