Tôi đã tạo một tập lệnh để ping các máy chủ chạy từ Trình lập lịch tác vụ. Nếu một máy chủ không ping, nó phải gửi cho tôi một email. Nó cũng gửi một email một lần mỗi ngày rằng nó còn sống.
Vấn đề là hầu hết các email được gửi đi và đến nơi như mong đợi, nhưng đôi khi một email không được gửi đi. Không có lỗi được tạo ra. Dựa trên phân tích luồng thư, email dường như không bao giờ đến được máy chủ Office365 Exchange của chúng tôi.
Tôi đã đọc nhiều giải pháp khác nhau, bao gồm chèn lệnh ghép ngắn ngủ và sử dụng khối thử/bắt. Cho đến nay, tôi chỉ tìm thấy các bài đăng có vấn đề khiến Gửi-MailMessage không thành công liên tục, nhưng không có bài đăng nào có vấn đề khiến nó không thành công.
Tôi đang ghi lại kết quả, nhưng liên quan đến thử/bắt, Gửi-MailMessage luôn thành công.Tệp nhật ký của tôi luôn hiển thị gửi thành công, không bao giờ gửi thất bại.
Các kỹ năng PowerShell của tôi vẫn còn ở giai đoạn mới bắt đầu, tất cả mã để giải mã tên người dùng và mật khẩu đã được sao chép từ những người khác hiểu biết hơn.
Mã đọc thông tin đăng nhập, giải mã thông tin đăng nhập, xây dựng và gửi email:
(emailOperator là tài khoản người dùng Office365 kết hợp có giấy phép E1)
100% thời gian, nếu tôi chạy tập lệnh từ PowerShell ISE theo cách thủ công, thì email sẽ được gửi.
100% thời gian, nếu tôi kích hoạt công việc theo cách thủ công từ Trình lập lịch tác vụ, email sẽ được gửi (tôi đã thực hiện việc này hàng chục lần chứ không phải hàng trăm lần).
$EmailRecipient = 'Tô[email protected]'
$emailFrom = '[email protected]'
$ReportingHost = 'Máy chủ báo cáo: ' + $env:computername
$CredentialLocation = "c:\MyServer\SendEmailUsingOffice365CredentialFolder\"
#Đọc khóa AES
$AES_AdminDomain_KeyFilePath = $CredentialLocation + "AESKEY.txt" <# Khóa mã hóa miền quản trị AES #>
$AESKey = Lấy nội dung $AES_AdminDomain_KeyFilePath
#Đọc và giải mã Mật khẩu bằng AESKey
$ExportedPasswordFilePath = $CredentialLocation + "Password.txt" <# Mật khẩu #>
$pwdTxt = Lấy nội dung $ExportedPasswordFilePath
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
#Đọc và giải mã tên người dùng bằng AESKey
$ExportedUserNameFilePath = $CredentialLocation + "User.txt" <# Tên người dùng #>
$UserSecureString = ConvertTo-SecureString -key $AESKey -String (Nhận nội dung $ExportedUserNameFilePath)
$Pulum = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($UserSecureString)
$Sender = [Runtime.InteropServices.Marshal]::PtrToStringAuto($Pointer)
#tạo thông tin đăng nhập
$EmailCredentials = Đối tượng mới System.Management.Automation.PSCredential -ArgumentList $Sender, $securePwd
#xây dựng email
$EmailSubject = $env:ComputerName + " đang hoạt động và đang kiểm tra điểm cuối tại " + (lấy ngày -Định dạng HH:mm)
$EmailBody = "- kết thúc -"
Bắt đầu ngủ -s 1
Cố gắng
{
Send-MailMessage -SmtpServer smtp.office365.com -Port 587 -UseSSL -From $EmailFrom -To $EmailRecipient -Subject $EmailSubject -Body $EmailBody -Credential $EmailCredentials
}
Nắm lấy
{
" lỗi, email tôi còn sống KHÔNG được gửi, x" + $_.Exception.Message + "x " + $(Get-Date -format 'MM/dd/yyyy,HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -append
}
" Email, tôi vẫn còn sống. Email đã gửi, y" + $_.Exception.Message + "y " + $(Get-Date -format 'MM/dd/yyyy,HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -append
Có phương pháp nào để gửi email và yêu cầu PowerShell theo dõi tiến trình của nó không?
Cảm ơn