根据日期导出为 CSV 并将该文件附加到电子邮件

Exporting to CSV based on date and attaching that file to an email

使用以下脚本,我的目的是实现以下目标:

  1. 根据一系列 Exchange 命令创建 CSV 文件,文件根据日期和时间命名。
  2. 将同一文件附加到电子邮件中。

我的脚本当前迭代如下:

$ems = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri `
       http://exchangehubcas.mydomain.com/powershell

Import-PSSession $ems -DisableNameChecking

function getRepQ {
    Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus |
        Sort-Object mailboxserver |
        Select-Object -Property mailboxserver, name, status, copyqueuelength,
            replayqueuelength, contentindexstate |
        Export-Csv -Path "c:\admin\scripts\exchange\ExchangeReplication_$((Get-Date).ToString('yyyy-mm-dd_hh-mm-ss')).csv"
}

function qchk {
    $nowfile = getRepQ 
    $data = Get-Content -Path $nowfile | Select-Object -Skip 1 |
            Out-String | ConvertFrom-Csv |
            Select-Object -Property status -Unique
    $repStat = $data.Status
    foreach ($_ in $repStat) {
        if ($_ -eq "Healthy") {
            Send-MailMessage -Attachments $nowfile -From admin@mydomain.com `
                -To jsmith@mydomain.com -Subject "Database replication failed" ` 
                -Body "Review attached CSV file for more details." `
                -SmtpServer exchangehubcas.mydomain.com
        }
    }
}

qchk

最终 "Healthy" 将更改为 "Failed",但是虽然正确生成了 .CSV 文件,但它在 qchk 函数上失败,表示 [=12= 的路径] 为空。

我哪里做错了?实现预期目标的正确方法是什么?

您的函数 getRepQ 将数据从 Get-MailboxDatabaseCopyStatus 导出到 CSV,但不 return 任何东西。因此,当您在 qchk.

中调用函数时,没有任何内容分配给变量 $nowfile

改变这个:

function getRepQ {
    Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus |
        Sort-Object mailboxserver |
        Select-Object -Property mailboxserver, name, status, copyqueuelength,
            replayqueuelength, contentindexstate |
        Export-Csv -Path "c:\admin\scripts\exchange\ExchangeReplication_$((Get-Date).ToString('yyyy-mm-dd_hh-mm-ss')).csv"
}

对此:

function getRepQ {
    $date = (Get-Date).ToString('yyyy-mm-dd_hh-mm-ss')
    $csv  = "C:\admin\scripts\exchange\ExchangeReplication_$date.csv"

    Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus |
        Sort-Object mailboxserver |
        Select-Object -Property mailboxserver, name, status, copyqueuelength,
            replayqueuelength, contentindexstate |
        Export-Csv -Path $csv

    $csv
}

并且该函数会将数据导出到 CSV 并且 return 该 CSV 到调用者的路径。