目前我有一个 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));
//+ " | Select Received,SenderAddress,RecipientAddress,Size"));
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 个查询)时,我都必须处理运行空间并重新创建它。它通常会带回大约 30,000 个结果,而我一次可以获得的最大大小是 5,000 个,这使得该过程非常耗时。
我是这种 Powershell/C# 集成的新手,所以我不确定我缺少什么。如果你们中的任何人知道我在处理此类操作时如何包含过滤或有任何建议/最佳实践,我将不胜感激。