目前,我有一个Powershell脚本,用于创建与的会话,然后使用以下查询查询Exchange电子邮件:
Get-MessageTrace -StartDate "10/07/2017 12:00 AM" -EndDate "11/06/2017 11:59 PM" -PageSize 5000 -Page $Page | Select Received,SenderAddress,RecipientAddress,Size
我想更新这个脚本,使其在C#中运行,这样我就可以将其作为服务运行,并自动更新开始和结束日期等字段。为此,我可以创建与服务器的会话,然后运行以下方法:
private static List<PSObject> RetrieveCurrentEmailList(string previousDate, DateTime currentDate, int pageSize,
int currentPage, IReadOnlyList<PSObject> psConnection, Runspace runspace)
{
var powershell = PowerShell.Create();
var command = new PSCommand();
command.AddCommand("Invoke-Command");
command.AddParameter("ScriptBlock",
ScriptBlock.Create(
"Get-MessageTrace -StartDate \"" + previousDate
+ "\" -EndDate \"" + currentDate.ToString("MM/dd/yyyy", CultureInfo.CreateSpecificCulture("en-US"))
+ "\" -pageSize " + pageSize
+ " -Page " + currentPage));
command.AddParameter("Session", psConnection[0]);
powershell.Commands = command;
powershell.Runspace = runspace;
Console.WriteLine("Executing query for page: " + currentPage);
return powershell.Invoke().ToList();
}
返回整个PSObject。然而,当我尝试包括“Select Received,SenderAddress,RecipientAddress,Size”过滤时,它停止返回结果。除此之外,还有一个问题,每次我想要运行这个方法(或任何查询,它似乎是1个运行空间,1个查询)时,我都必须处理运行空间并重新创建它。它通常会返回大约30000个结果,我一次最多可以得到5000个结果,这使得这个过程非常耗时。
我是这种Powershell/C集成的新手,所以我不确定我错过了什么。如果你们中的任何人知道我在处理此类操作时如何包括过滤或有任何建议/最佳做法,我将不胜感激。