Zur Zeit habe ich einen Powershell-Skript, das eine Sitzung mit und fragt dann eine Exchange-E-Mail mit der folgenden Abfrage erstellt:Get-MessageTrace zu Exchange Server mit C# Powershell
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
Ich will mich dieses Skript aktualisieren, so Thay es läuft innerhalb C#, damit ich es als ein Service mit Feldern wie den Anfangs- und Enddaten ausführen kann, die automatisch laufen. Zu diesem Zweck habe ich es bis zu dem Punkt, wo ich eine Sitzung mit dem Server erstellen und dann die folgende Methode ausgeführt:
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();
}
, die die gesamte PSObject zurückgibt. Wenn ich jedoch versuche, die Filterung "| Received, SenderAddress, RecipientAddress, Size" einzufügen, werden keine Ergebnisse mehr angezeigt. Darüber hinaus gibt es ein Problem, bei dem ich den Runspace löschen und neu erstellen muss, wenn ich diese Methode ausführen möchte (oder irgendeine Abfrage, es scheint 1 Runspace, 1 Abfrage zu sein). Es bringt normalerweise ungefähr 30.000 Resultate zurück und die maximale Größe, die ich auf einmal bekommen kann, ist 5.000, was den Prozess ziemlich zeitaufwendig macht.
Ich bin neu in dieser Art von Powershell/C# Integration, so dass ich nicht sicher bin, was ich vermisse. Wenn jemand von Ihnen weiß, wie ich die Filterung einbeziehe oder irgendwelche Ratschläge/Best Practices im Umgang mit dieser Art von Operationen habe, würde ich es sehr begrüßen.
Danke für den Hinweis! Ich habe es geschafft, es ohne die Select-Anweisung arbeiten zu lassen, aber das verspricht eine viel bessere und viel effizientere Lösung für das Problem :) – GameCrazed