我试图通过我的C#应用程序在PowerShell中运行以下命令。
PsSession.RunPowerShellScript("Get-Mailboxstatistics -Identity John.Doe");
方法RunPowerShellScript
返回输出的连接字符串,如下所示。
public static string RunPowerShellScript(string psScript)
{
try
{
PowerShell ps = PowerShell.Create();
ps.Runspace = psRunSpace; //Set Statically Elsewhere
ps.AddScript(psScript);
Collection<PSObject> results = ps.Invoke();
if (ps.HadErrors)
{
string output = "";
foreach (ErrorRecord errorRecord in ps.Streams.Error)
output += errorRecord.Exception.Message.ToString();
throw new Exception(output);
}
else
{
if (results.Count != 0)
{
string output = "";
foreach (PSObject result in results)
output += result.BaseObject.ToString();
return output;
}
else
{
if (ps.Streams.Warning.Count != 0)
{
string output = "";
foreach (WarningRecord s in ps.Streams.Warning)
output += s.Message.ToString();
return output;
}
else
return "No Results.";
}
}
}
catch (Exception ex)
{
return "Error: " + ex.Message.ToString();
}
}
问题是当Get-MailboxStatistics
cmdlet返回警告时,ps.Streams.Warning.Count
仍然等于0(实际上所有 streams.count = 0)。
但是,如果我跑
PsSession.RunPowerShellScript("Write-Warning 'Test'")
然后它会正确地返回警告(&#34;测试&#34;)。
我尝试通过运行此
将警告流重定向到输出流PsSession.RunPowerShellScript("Get-Mailboxstatistics -Identity John.Doe *>&1");
但这并没有解决它。
如果我从PowerShell ISE运行cmdlet,我会得到以下内容
PS C:\Windows\system32> Get-Mailboxstatistics -Identity John.Doe
WARNING: The user hasn't logged on to mailbox 'John.Doe'...
答案 0 :(得分:0)
我遇到了同样的问题,因此我决定使用-WarningAction Stop,然后解析异常消息。