验证后发送电子邮件的Powershell脚本

时间:2020-09-08 06:38:55

标签: powershell

我有一个Powershell脚本,可以将结果记录到一个文本文件中(这很好用),现在我需要更新它以发送电子邮件而不是一个日志文件(请参阅下面的实际脚本)。我是Powershell的新手,希望您能为我提供帮助。

# details of the script
# if a file "FILE.400" is found and check the modified date, it will send a log file (txt file)
# need to update the script, to send email instead of a log file

$svr=$env:ComputerName
$date=[datetime]::Today.ToString('MM-dd-yyyy')
$filename = "FILE.400"
$DestLogs1 = "E:\sample\pfupdatedfin-$date.txt"
$DestLogs2 = "E:\sample\pfoutdatedfin-$date.txt"
$SrcPath = "E:\sample\$filename"

If ((Get-ChildItem $SrcPath).LastWriteTime -gt $date)
{
$date | Out-File $DestLogs1
Write-Output "Found latest FILE.400 file" | Out-File $DestLogs1 -Append
(Get-ChildItem -Recurse -Path $SrcPath).LastWriteTime | Out-File $DestLogs1 -Append
}
Else 
{
Write-Output "FILE.400 - is not updated, please verify " | Out-File $DestLogs2
(Get-ChildItem -Recurse -Path $SrcPath).LastWriteTime | Out-File $DestLogs2 -Append
}

2 个答案:

答案 0 :(得分:0)

Send-MailMessageis非常易于使用。 cmdlet的online documentation很容易找到。只需在您喜欢的搜索引擎中输入cmdlet的名称即可。或使用Get-Help cmdlet。这是一个如何使用它来合理填充变量的示例:

Send-MailMessage -From $From -To $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Port $SMTPPort  -Credential $Credential  # -UseSsl:$UseSsl 

-useSsl是一个开关,因此除非是$true,否则没有必要。如果要为switch参数提供变量,请不要使用空格,而应在两者之间使用:

Powershell中的凭证存储在凭证对象中。您不能只使用纯文本密码。但是,不要认为它们被极端地保存了,因为如果您知道如何可以很容易地提取密码。这是创建必要的凭据对象的方法:

$SecPw =  ConvertTo-SecureString -AsPlainText $Password -Force
$Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $UserName,$SecPw

答案 1 :(得分:0)

脚本在我的家庭网络中按预期工作

$svr=$env:ComputerName
$date=[datetime]::Today.ToString('MM-dd-yyyy')
$filename = "FILE.400"
$DestLogs1 = "E:\sample\pfupdatedfin-$date.txt"
$DestLogs2 = "E:\sample\pfoutdatedfin-$date.txt"
$SrcPath = "E:\sample\$filename"

# email settings
$MyEmail = "myemail@gmail.com"
$SMTP = "smtp.gmail.com"
$To = "samplereceiver@gmail.com"
$Subject1 = "JDA-Alert || Found FILE.400 file - Successful"
$Body1 = "JDA-Alert || Found FILE.400 file - Successful"
$Subject2 = "JDA-Alert || FILE.400 file - Outdated File"
$Body2 = "JDA-Alert || FILE.400 file - Outdated File"
$Creds = (Get-Credential -Credential "$MyEmail")

If ((Get-ChildItem $SrcPath).LastWriteTime -gt $date)
{
Start-Sleep 2
Send-MailMessage -To $To -From $MyEmail -Subject $Subject1 -Body $Body1 -SmtpServer $SMTP -Credential $Creds -UseSsl -Port 587 -DeliveryNotificationOption Never
}
Else 
{
Start-Sleep 2
Send-MailMessage -To $To -From $MyEmail -Subject $Subject2 -Body $Body2 -SmtpServer $SMTP -Credential $Creds -UseSsl -Port 587 -DeliveryNotificationOption Never
}