Score:0

Powershell ส่ง MailMessage

ธง in

ฉันสร้างสคริปต์เพื่อ ping เซิร์ฟเวอร์ที่รันจาก Task Scheduler หากเซิร์ฟเวอร์ไม่ ping ก็ควรส่งอีเมลถึงฉัน นอกจากนี้ยังส่งอีเมลวันละครั้งว่ายังมีชีวิตอยู่

ปัญหาคืออีเมลส่วนใหญ่ถูกส่งและมาถึงตามที่คาดไว้ แต่บางครั้งอีเมลก็ไม่ถูกส่ง ไม่มีข้อผิดพลาดเกิดขึ้น จากการวิเคราะห์การรับส่งอีเมล ดูเหมือนว่าอีเมลจะไม่ส่งถึงเซิร์ฟเวอร์ Office365 Exchange ของเรา

ฉันได้อ่านวิธีแก้ปัญหาต่างๆ รวมถึงการแทรก sleep cmdlets และการใช้บล็อก try/catch จนถึงตอนนี้ฉันพบเฉพาะโพสต์ที่มีปัญหาที่ Send-MailMessage ล้มเหลวอย่างสม่ำเสมอ แต่ไม่มีโพสต์ใดที่มีปัญหาที่ล้มเหลวอย่างไม่สม่ำเสมอ

ฉันกำลังบันทึกผลลัพธ์ แต่เท่าที่ลอง/จับแล้ว Send-MailMessage จะสำเร็จเสมอไฟล์บันทึกของฉันแสดงการส่งที่สำเร็จเสมอ ไม่เคยล้มเหลว

ทักษะ PowerShell ของฉันยังอยู่ในช่วงเริ่มต้น รหัสทั้งหมดสำหรับการถอดรหัสรหัสผู้ใช้และรหัสผ่านนั้นคัดลอกมาจากผู้ที่มีความรู้มากกว่าคนอื่นๆ

รหัสที่อ่านข้อมูลประจำตัว ถอดรหัสข้อมูลประจำตัว สร้างและส่งอีเมล:

(emailOperator เป็นบัญชีผู้ใช้ Office365 แบบไฮบริดที่มีสิทธิ์การใช้งาน E1)

100% ถ้าฉันเรียกใช้สคริปต์จาก PowerShell ISE ด้วยตนเอง อีเมลจะถูกส่ง 100% ของเวลาทั้งหมด ถ้าฉันเรียกงานด้วยตนเองจาก Task Scheduler อีเมลจะถูกส่ง (ฉันทำแบบนี้หลายสิบครั้ง ไม่ใช่หลายร้อยครั้ง)

$EmailRecipient = '[email protected]'
$emailFrom = '[email protected]'
$ReportingHost = 'โฮสต์การรายงาน:' + $env:ชื่อคอมพิวเตอร์
$CredentialLocation = "c:\MyServer\SendEmailUsingOffice365CredentialFolder\"

#อ่านรหัส AES
$AES_AdminDomain_KeyFilePath = $CredentialLocation + "AESKEY.txt" <# คีย์การเข้ารหัสโดเมนของผู้ดูแลระบบ AES #>
$AESKey = รับเนื้อหา $AES_AdminDomain_KeyFilePath

# อ่านและถอดรหัสรหัสผ่านโดยใช้ AESKey
$ExportedPasswordFilePath = $CredentialLocation + "Password.txt" <# รหัสผ่าน #> 
$pwdTxt = รับเนื้อหา $ExportedPasswordFilePath
$securePwd = $pwdTxt | ConvertTo-SecureString - คีย์ $AESKey

# อ่านและถอดรหัสชื่อผู้ใช้โดยใช้ AESKey
$ExportedUserNameFilePath = $CredentialLocation + "User.txt" <# ชื่อผู้ใช้ #>
$UserSecureString = ConvertTo-SecureString -key $AESKey -String (รับเนื้อหา $ExportedUserNameFilePath)
$Pointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($UserSecureString)
$Sender = [Runtime.InteropServices.Marshal]::PtrToStringAuto($ตัวชี้)

#สร้างข้อมูลประจำตัว
$EmailCredentials = New-Object System.Management.Automation.PSCredential -ArgumentList $Sender, $securePwd

#สร้างอีเมล
$EmailSubject = $env:ComputerName + " ยังมีชีวิตอยู่และกำลังตรวจสอบปลายทางที่ " + (get-date -Format HH:mm)
$EmailBody = "- จบ - "

เริ่ม-สลีป -s 1
พยายาม
    {
    Send-MailMessage -SmtpServer smtp.office365.com -Port 587 -UseSSL -From $EmailFrom -To $EmailRecipient -Subject $EmailSubject -Body $EmailBody -Credential $EmailCredentials
    }
    จับ
    {
    " ข้อผิดพลาด ฉันยังไม่ได้ส่งอีเมล x" + $_.Exception.Message + "x " + $(Get-Date -format 'MM/dd/yyyy,HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -ต่อท้าย 
    }
" อีเมล ฉันยังคงส่งอีเมลอยู่ y" + $_.Exception.Message + "y " + $(Get-Date -format 'MM/dd/yyyy,HH:mm:ss') | Out-File -Filepath $Log_File -NoClobber -ต่อท้าย

มีวิธีการส่งอีเมลและให้ PowerShell ติดตามความคืบหน้าหรือไม่

ขอบคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา