将电子邮件代码与if语句结合使用

时间:2013-11-13 16:40:52

标签: powershell-v2.0

我是Powershell的新手,我很难将两个脚本连接在一起。 我想要做的是检查特定文件夹中所有csv文件的长度,如果它们中的任何一个是0 Kb,我想发送一个警报电子邮件。到目前为止,我有一个成功发送电子邮件的脚本,我有一个成功检查大小的脚本,但是我无法将两者连接在一起。

理想情况下,它会在电子邮件正文中发送空文件的名称。

下面的代码检查文件大小,如果大于1Kb,则返回true。

    $file = 'FilePath\File1.csv'
    $Result = if (Test-Path $file) { (Get-Item $file).length -gt 1kb }

    if ($Result -eq "True") {"File1.csv Contains Data"} ELSE {"File1.csv is      Empty!"}

    $file = 'FilePath\File2.csv'
    $Result = if (Test-Path $file) { (Get-Item $file).length -gt 1kb }

    if ($Result -eq "True") {"File2.csv Contains Data"} ELSE {"File2.csv is  Empty!"}

    $file = 'FilePath\File3.csv'
    $Result = if (Test-Path $file) { (Get-Item $file).length -gt 1kb }

    if ($Result -eq "True") {"File3.csv Contains Data"} ELSE   {"File3.csv is Empty!"}

    $file = 'FilePath\File4.csv'
    $Result = if (Test-Path $file) { (Get-Item $file).length -gt 1kb }

    if ($Result -eq "True") {"File4.csv Contains Data"} ELSE {"File4.csv is Empty!"}

    $file = 'FilePath\FileName5.csv'
    $Result = if (Test-Path $file) { (Get-Item $file).length -gt 1kb }

    if ($Result -eq "True") {"File5.csv Contains Data"} ELSE {"File5.csv is Empty!"}

    $file = 'FilePath\FileName6.csv'
    $Result = if (Test-Path $file) { (Get-Item $file).length -gt 1kb }

    if ($Result -eq "True") {"File6.csv Contains Data"} ELSE {"File6.csv is Empty!"}

以下是电子邮件部分

    $subject = "Emailtest"
    $body =  "test"
    $emailTo = "jbloggs@Madeup.com"
    $emailFrom ="JohnSmith@123.com"
    $smtpServer = “mail.madeup.com”
    $smtp = new-object Net.Mail.SmtpClient($smtpServer)
    $credentials=new-object system.net.networkcredential(”username”,”password”)
    $smtp.credentials=$credentials.getcredential($smtpserver,"25","basic")
    $smtp.Send($emailFrom, $emailTo, $subject, $body)

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是为了检查空文件而进行的大量(手动)工作。添加第七个会发生什么 - 您是否需要编辑脚本?

$EmptyFiles = (Get-childItem -Path $FilePath -Filter *.csv | `
    where-object {$_.length -eq 0}|select-object -expandproperty Name)

$MsgBody = "The following files are empty:";
$EmptyFiles | foreach{$MsgBody+="`n$_";};

$MsgBody; # Just to output to console

$secpasswd = ConvertTo-SecureString "password" -AsPlainText -Force
$credentials= New-Object System.Management.Automation.PSCredential ("username", $secpasswd)
$subject = "Emailtest"
$body =  "test"
$emailTo = "jbloggs@Madeup.com"
$emailFrom ="JohnSmith@123.com"
$smtpServer = “mail.madeup.com”
send-mailmessage -smtpserver $smtpServer -subject $subject -to $emailto -Credential $credentials -body $MsgBody