根据日期导出为 CSV 并将该文件附加到电子邮件
Exporting to CSV based on date and attaching that file to an email
使用以下脚本,我的目的是实现以下目标:
- 根据一系列 Exchange 命令创建 CSV 文件,文件根据日期和时间命名。
- 将同一文件附加到电子邮件中。
我的脚本当前迭代如下:
$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 到调用者的路径。
使用以下脚本,我的目的是实现以下目标:
- 根据一系列 Exchange 命令创建 CSV 文件,文件根据日期和时间命名。
- 将同一文件附加到电子邮件中。
我的脚本当前迭代如下:
$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 到调用者的路径。