현재 내가 세션을 생성 한 후 다음 쿼리는 Exchange 전자 메일을 조회하는 PowerShell 스크립트가 : 나는 그래서이 스크립트를 업데이트 꿔C# PowerShell을 사용하여 Exchange 서버에-MessageTrace 얻기
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# 내에서 실행되므로 자동으로 업데이트되는 시작일과 종료일과 같은 필드가있는 서비스로 실행할 수 있습니다. 이를 위해 나는 다음과 같은 방법을 서버와의 세션을 생성하고 실행할 수있는 지점에있다 : 전체 PSObject을 반환
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();
}
합니다. 그러나 "Select Received, SenderAddress, RecipientAddress, Size"필터링을 포함 시키려고하면 결과가 반환되지 않습니다. 이것의 맨 위에는 runspace를 처리하고이 메서드를 실행할 때마다 다시 만들어야하는 문제가 있습니다 (또는 모든 쿼리가 1 개의 runspace, 1 개의 쿼리 인 것 같습니다). 일반적으로 약 30,000 개의 결과를 가져 오며 한 번에 얻을 수있는 최대 크기는 5,000이므로 프로세스에 많은 시간이 소요됩니다.
저는 PowerShell/C# 통합의 이런 종류에 익숙하지 않아서 무엇이 실종되었는지 확실하지 않습니다. 어떤 유형의 작업을 처리 할 때 필자가 필터링을 포함하거나 조언/베스트 프랙티스를 가질 수있는 방법을 알고 있다면 크게 감사하겠습니다.
조언 해 주셔서 감사합니다. Select 문 없이도 작동하도록 만들었지 만 문제에 대한 훨씬 더 효율적이고 효율적인 방법을 약속합니다. – GameCrazed