Saat ini saya memiliki skrip Powershell yang membuat sesi dengan dan kemudian menanyakan email Exchange dengan kueri berikut:

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

Saya ingin memperbarui skrip ini agar berjalan di dalam C # sehingga saya dapat menjalankannya sebagai layanan dengan bidang-bidang seperti tanggal mulai dan akhir diperbarui secara otomatis. Untuk tujuan ini saya sampai pada titik di mana saya dapat membuat sesi dengan server dan kemudian menjalankan metode berikut:

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();
    }

Yang mengembalikan seluruh PSObject. Namun ketika saya mencoba memasukkan pemfilteran "| Select Received,SenderAddress,RecipientAddress,Size" itu berhenti mengembalikan hasil. Di atas ini ada masalah di mana saya harus membuang runspace dan membuatnya kembali setiap kali saya ingin menjalankan metode ini (atau kueri apa pun, sepertinya 1 runspace, 1 kueri). Biasanya mengembalikan sekitar 30.000 hasil dan ukuran maksimal yang bisa saya dapatkan dalam satu waktu adalah 5.000, membuat prosesnya cukup memakan waktu.

Saya baru mengenal integrasi Powershell/C# semacam ini, jadi saya tidak yakin apa yang saya lewatkan. Jika ada di antara Anda yang tahu bagaimana saya dapat menyertakan pemfilteran atau memiliki saran/praktik terbaik saat menangani jenis operasi ini, saya akan sangat menghargainya.

0
GameCrazed 21 November 2017, 14:11

1 menjawab

Jawaban Terbaik