有没有办法以与通过 powershell cmd 手动运行命令相同的方式在 C# 中获取 powershell 输出?即例如:
PS C:\temp> gci
Directory: C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 19.10.2018 9:57 SomeDir
-a--- 13.11.2018 17:03 3306 Somelog.log
Run Code Online (Sandbox Code Playgroud)
和 C# 代码:
PowerShell ps = PowerShell.Create();
ps.AddCommand("gci");
ICollection<PSObject> results = ps.Invoke();
foreach (PSObject invoke in results)
{
Console.WriteLine(invoke.ToString());
}
Run Code Online (Sandbox Code Playgroud)
给我:
SomeDir
Somelog.log
Run Code Online (Sandbox Code Playgroud)
附加一个调用 的(最终)管道段Out-String,它会生成与您在控制台中看到的相同的表示形式,作为单个多行字符串:
using (var ps = PowerShell.Create())
{
ps.AddScript("gci | Out-String");
foreach (PSObject o in ps.Invoke())
{
Console.WriteLine(o.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
Out-String使用默认的输出行宽度,您可以使用参数覆盖它-Width。
要将输出作为行集合而不是单个多行字符串接收,请使用-Stream.
如果您想要对输出格式进行更多控制,可以在调用之前Out-String添加另一个调用其中一个Format-*cmdlet 的管道段,例如Format-Table.
警告:
正如boxdog指出的那样,这种方法仅适合获取for-display输出,因为生成的字符串并不意味着用于编程处理(您已经丢失了原始对象的类型信息,并且无法保证特定的输出格式)具有长期稳定性)。
当然,您首先可以在中间步骤中存储原始输出对象,以便保留它们以供以后的编程处理。
| 归档时间: |
|
| 查看次数: |
3594 次 |
| 最近记录: |