我正在通过C#构建一个PowerShell主机,我想在调用PowerShell后显示结果。现在我使用以下方法:
public static string GetLogQueriedString(
PSMemberInfoCollection<PSPropertyInfo> PSPropertyCollection)
{
string line = string.Empty;
foreach (var item in PSPropertyCollection)
{
if (!line.Equals(string.Empty)) line += ",";
line += item.Name + " : " + item.Value;
}
return line;
}
Run Code Online (Sandbox Code Playgroud)
如果 PSObject 有许多我需要的属性,它就可以工作,但在这种情况下,如果 PSObject 是一个字符串,则结果不是我想要的。它将显示“长度:40”,而不是字符串本身。
还有一个问题:如果我执行几个PowerShell命令,为什么会显示所有结果,包括之前的结果。比如我执行“ls;get-process”,它会显示“ls”的结果和“get-process”的结果。
我认为我们需要查看更多您的代码。显示返回的 PSObject 的典型方法是:
using (var ps = PowerShell.Create()) {
while (true) {
Console.WriteLine("Enter an expression:");
string input = Console.ReadLine();
if (String.IsNullOrWhiteSpace(input)) break;
ps.AddScript(input);
Collection<PSObject> results = ps.Invoke();
foreach (var result in results) {
Console.WriteLine(result);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要访问返回对象的属性并且您感兴趣的只是格式化文本,请尝试更改此行:
ps.AddScript(input + " | Out-String");
Run Code Online (Sandbox Code Playgroud)
如果您想根据对象类型进行自定义格式设置,则需要根据您认为合适的方式测试类型和格式:
foreach (var result in results) {
var baseObj = result.BaseObject;
if (baseObj is System.Diagnostics.Process)
{
var p = (System.Diagnostics.Process) baseObj;
Console.WriteLine("Handles:{0}, NPM:{1}, PM:{2}, etc", p.HandleCount, p.NonpagedSystemMemorySize, p.PagedMemorySize);
}
else {
Console.WriteLine(result);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12122 次 |
| 最近记录: |