Am creat un script pentru serverele ping care rulează din Task Scheduler. Dacă un server nu face ping, ar trebui să-mi trimită un e-mail. De asemenea, trimite un e-mail o dată pe zi că este în viață.
Problema este că majoritatea e-mailurilor sunt trimise și ajung așa cum era de așteptat, dar ocazional un e-mail nu este trimis. Nu este generată nicio eroare. Pe baza analizei fluxului de corespondență, e-mailul nu pare să ajungă niciodată la serverul nostru Office365 Exchange.
Am citit diverse soluții, inclusiv inserarea cmdlet-urilor de somn și utilizarea unui bloc try/catch. Până acum am găsit doar postări cu probleme în care Send-MailMessage eșuează în mod constant, dar nicio postare cu o problemă în care eșuează neregulat.
Înregistrez rezultatele, dar în ceea ce privește încercarea/prinderea, Send-MailMessage reușește întotdeauna.Fișierele mele jurnal arată întotdeauna o trimitere reușită, niciodată un eșec.
Abilitățile mele PowerShell sunt încă în stadiul de începător, tot codul pentru decriptarea ID-ului de utilizator și a parolei a fost copiat de la alți oameni mai cunoscători.
Cod care citește acreditările, decriptează acreditările, construiește și trimite e-mail:
(emailOperator este un cont de utilizator hibrid Office365 cu o licență E1)
100% din timp, dacă rulez manual scriptul din PowerShell ISE, e-mailul este trimis.
100% din timp, dacă declanșez jobul manual din Task Scheduler, e-mailul este trimis (am făcut asta de zeci de ori, nu de sute).
$EmailRecipient = „Eu@Domeniul meu.org”
$emailFrom = '[email protected]'
$ReportingHost = 'Gazda de raportare: ' + $env:computername
$CredentialLocation = "c:\MyServer\SendEmailUsingOffice365CredentialFolder\"
#Citiți cheia AES
$AES_AdminDomain_KeyFilePath = $CredentialLocation + „AESKEY.txt” <# AES Admin Domain Encryption Key #>
$AESKey = Obține conținut $AES_AdminDomain_KeyFilePath
#Citiți și decriptați parola folosind AESKey
$ExportedPasswordFilePath = $CredentialLocation + „Password.txt” <# Parolă #>
$pwdTxt = Obține conținut $ExportedPasswordFilePath
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
#Citiți și decriptați numele de utilizator folosind AESKey
$ExportedUserNameFilePath = $CredentialLocation + „User.txt” <# Nume de utilizator #>
$UserSecureString = ConvertTo-SecureString -key $AESKey -String (Obține conținut $ExportedUserNameFilePath)
$Pointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($UserSecureString)
$Sender = [Runtime.InteropServices.Marshal]::PtrToStringAuto($Pointer)
#generați acreditările
$EmailCredentials = Obiect nou System.Management.Automation.PSCredential -ArgumentList $Sender, $securePwd
#Construiți e-mailul
$EmailSubject = $env:ComputerName + " este activ și verifică punctele finale la " + (get-date -Format HH:mm)
$EmailBody = "- sfârșit - "
Start-Sleep -s 1
Încerca
{
Send-MailMessage -SmtpServer smtp.office365.com -Port 587 -UseSSL -From $EmailFrom -To $EmailRecipient -Subject $EmailSubject -Body $EmailBody -Credential $EmailCredentials
}
Captură
{
" eroare, sunt e-mail în viață NU a fost trimis, x" + $_.Exception.Message + "x " + $(Get-Date -format 'LL/zz/aaaa, HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -append
}
" e-mail, sunt în viață e-mail trimis, y" + $_.Exception.Message + "y " + $(Get-Date -format 'LL/zz/aaaa, HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -append
Există o metodă pentru a trimite e-mailul și pentru ca PowerShell să urmărească progresul acestuia?
mulțumesc