단계별 : Windows Server 2016을 사용하여 이벤트 세부 정보가 포함 된 Windows 이벤트에서 전자 메일 경고를 트리거하는 방법
소개
Windows 이벤트에서 전자 메일 경고 트리거 Windows Server 2010을 사용하면 2016 단계 만 수행하면됩니다. 해당 작업이 트리거 될 때 발생할 작업을 지정하십시오. Microsoft는 "전자 메일 보내기"옵션을 사용하지 않기로 결정 했으므로 프로그램을 시작하기 만하면됩니다. 이 경우 이벤트 로그 정보를 수집하고 구문 분석하는 Powershell 스크립트입니다. 이렇게하면 중요한 로그 이벤트 세부 정보가 포함 된 이메일을 보낼 수 있습니다. 이 작업은 Windows Server 2016에서 확인되었습니다. 그러나 Windows Server 2012 R2 및 Windows Server 2019에서도 작동해야합니다. 다른 플랫폼에서 작동하게하는 경우 의견을 보내주십시오. 변경해야하는 경우 저희에게 알려주십시오.
1 단계 – Powershell 스크립트 작성
가장 먼저 할 일은 Powershell 스크립트를 작성하여 실행할 때 전자 메일을 보낼 수있게하는 것입니다. 이것을 연구하는 동안이 작업을 수행하는 여러 가지 방법을 발견 했으므로 내가 보여줄 내용은 단지 한 가지 방법 일 뿐이지 만 환경에 맞는 것을 실험하고 자유롭게 사용할 수 있습니다. 내 실험실에서는 자체 SMTP 서버를 실행하지 않으므로 Gmail 계정을 활용할 수있는 스크립트를 작성해야했습니다. 내 Powershell 스크립트에서 SMTP 서버에 인증하는 전자 메일 계정의 암호가 일반 텍스트임을 알 수 있습니다. 다른 사람이 스크립트에 액세스하여 암호를 알아 내지 못하도록 염려되는 경우 자격 증명을 암호화하십시오. Gmail과 SSL 연결이 필요합니다. 비밀번호는 다른 이메일 클라이언트와 마찬가지로 전선에서 안전해야합니다. 나는 Powershell 스크립트 예제를 가지고있다. 작업 스케줄러와 함께 사용하면 지정된 이벤트가 Windows 이벤트 로그에 기록 될 때 자동으로 전자 메일 경고를 보냅니다. 제 환경에서는이 스크립트를 C : Alerts DataKeeper.ps1에 저장했습니다.
$ EventId = 16,20,23,150,219,220 $ A = Get-WinEvent -MaxEvents 1 -FilterHashTable @ {Logname = "System"; ID = $ EventId} $ Message = $ A.Message $ EventID = $ A.Id $ MachineName = $ A.MachineName $ Source = $ A.ProviderName $ EmailFrom = "sios@medfordband.com" $ EmailTo = "sios@medfordband.com" $ Subject = "Alert from $ MachineName" $ Body` "EventID : $ EventID`nSource : $ 소스`nMachineName : $ MachineName`nMessage : $ Message" $ SMTPServer = "smtp.gmail.com" $ SMTPClient = 새 개체 Net.Mail.SmtpClient ($ SmtpServer, 587) $ SMTPClient.EnableSsl = $ true $ SMTPClient.Credentials = New-Object System.Net.NetworkCredential ( "sios@medfordband.com", "mySMTPP @ 55w0rd"); $ SMTPClient.Send ($ EmailFrom, $ EmailTo, $ Subject, $ Body)
Powershell 스크립트에서 생성 된 전자 메일의 예는 다음과 같습니다. 이 Powershell 스크립트는 Get-WinEvent cmdlet을 사용하여 지정된 LogName, Source 및 eventID에 따라 최신 이벤트 로그 항목을 가져 오는 것을 확인했습니다. 그런 다음 이벤트를 구문 분석하고 전자 메일을 작성하는 데 사용할 변수에 EventID, Source, MachineName 및 Message를 할당합니다. 지정한 LogName, Source 및 eventID가 2 단계에서 예약 된 작업을 설정할 때 지정하는 것과 동일하다는 것을 알 수 있습니다.
2 단계 – 예약 된 작업 설정
작업 스케줄러에서 다음 그림과 같이 작업을 만듭니다.
- 작업 만들기 사용자가 로그온했는지 여부에 관계없이 작업이 실행되도록 설정되어 있는지 확인하십시오.
- 트리거 탭에서 새로 만들기를 선택하여 "이벤트 발생"작업을 시작할 트리거를 만듭니다. 필자의 예에서는 DataKeeper (extmirr)가 중요한 이벤트를 시스템 로그에 기록 할 때마다 트리거하는 이벤트를 생성합니다. 아래 그림과 같이 사용자 지정 이벤트 및 새 이벤트 필터를 만듭니다 … 내 트리거의 경우 일반적으로 모니터링되는 SIOS DataKeeper (ExtMirr) EventIDs 16, 20, 23,150,219,220을 트리거합니다. 모니터하려는 특정 이벤트에서 트리거하도록 이벤트를 설정해야합니다. 다른 로그 또는 소스에서 온 이벤트에 대한 통지를 받으려면 동일한 태스크에 여러 개의 트리거를 넣을 수 있습니다.
- 이벤트 트리거가 구성되면 이벤트가 실행될 때 발생하는 작업을 구성해야합니다. 이 경우에는 1 단계에서 만든 Powershell 스크립트를 실행합니다.
- 기본 조건 매개 변수로 충분해야합니다.
- 마지막으로 설정 탭에서 작업이 이미 실행중인 경우 필요시 실행되도록하고 "새 인스턴스 대기"로 설정하십시오.
3 단계 (필요한 경우) – Microsoft Windows DistributedCOM 수정 이벤트 ID : 10016 오류
이론 상으로는 모든 것을 올바르게 수행했다면 Windows Server 2016을 사용하여 Windows 이벤트에서 전자 메일 경고를 트리거 할 수 있어야합니다. 그러나 내 서버 중 하나에서 이상한 사용 권한 문제가 발생했습니다. 여기 내 문제가 해결되었습니다. 희망도 그것은 당신을 도울 것입니다. 필자가 수동으로 이벤트를 트리거 한 경우 또는 PowerShell 스크립트를 직접 실행 한 경우 모든 것이 예상대로 작동하고 전자 메일을 받게됩니다. 그러나 모니터링중인 EventID 중 하나가 이벤트 로그에 기록되면 전자 메일이 전송되지 않습니다. 내가 가진 유일한 단서는 이벤트 ID : 10016입니다. 작업 트리거가 기록 된 이벤트를 감지 할 것으로 예상 할 때마다 내 시스템 이벤트 로그에 기록되었습니다.
로그 이름 : 시스템 출처 : Microsoft-Windows-DistributedCOM 날짜 : 10/27/2018 5:59:47 PM 이벤트 ID : 10016 작업 범주 : 없음 수준 : 오류 키워드 : 클래식 사용자 : DATAKEEPER dave 컴퓨터 : sql1.datakeeper.local 기술: 응용 프로그램 별 권한 설정은 로컬 활성화 권한을 부여하지 않습니다. CLSID 사용하여 COM 서버 응용 프로그램에 대한 {D63B10C5-BB46-4990-A94F-E40B9D520160} 및 APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276} 사용자에게 DATAKEEPER dave SID (S-1-5-21-25339xxxxx-208xxx580-6xxx06984-500) 보낸 사람 주소 LocalHost (LRPC 사용) 응용 프로그램 컨테이너에서 실행 Unavailable SID (Unavailable). 이 보안 권한은 구성 요소 서비스 관리 도구를 사용하여 수정할 수 있습니다.
해당 오류에 대한 Google 검색 결과의 대부분은 오류가 양호 함을 나타냅니다. 여기에는 오류를 수정하는 대신 오류를 억제하는 방법에 대한 지침이 포함되어 있습니다. 그러나, 나는이 오류가 현재의 실패의 원인이라고 확신했다. 필자가 올바르게 수정하지 않으면 Windows Server 2016을 사용하여 Windows 이벤트에서 전자 메일 경고 트리거하기가 어려울 것입니다. 많은 검색을 한 후에, 나는이 뉴스 그룹 토론을 발견했습니다. Marc Whittlesey의 답변은 올바른 방향으로 나를 지적했습니다. 이것은 그가 쓴 것입니다 …
구성 요소 서비스의 DCOM 구성 (CLSID 키 및 APPID 키)에 가기 전에 사용 권한을 설정해야하는 두 가지 레지스트리 키가 있습니다.
문제를 해결하기위한 몇 가지 단계를 따르는 것이 좋습니다.
1. Windows + R 키를 누르고 regedit를 입력하고 Enter 키를 누릅니다. 2. HKEY_Classes_Root CLSID * CLSID *로 이동하십시오. 삼. 그것을 마우스 오른쪽 단추로 클릭 한 다음 권한을 선택하십시오. 4. 고급을 클릭하고 소유자를 관리자로 변경하십시오. 소유자 줄 아래에 표시되는 상자를 클릭하십시오. 5. 완전한 제어를 적용하십시오. 6. 탭을 닫은 다음 HKEY_LocalMachine Software Classes AppID * APPID *로 이동하십시오. 7. 그것을 마우스 오른쪽 단추로 클릭 한 다음 권한을 선택하십시오. 8. 고급을 클릭하고 소유자를 관리자로 변경하십시오. 9. 소유자 선 아래에 표시 될 상자를 클릭하십시오. 10. 적용을 클릭하고 관리자에게 모든 권한을 부여하십시오. 11. 모든 탭을 닫고 관리 도구로 이동하십시오. 12. 구성 요소 서비스를 엽니 다. 13. 컴퓨터, 내 컴퓨터를 차례로 클릭 한 다음 DCOM을 클릭하십시오. 14. 오류 표시기에 나타나는 해당 서비스를 찾으십시오. 15. 마우스 오른쪽 버튼으로 클릭 한 다음 속성을 클릭하십시오. 16. 보안 탭을 클릭 한 다음 사용자 추가, 시스템 추가, 적용을 클릭하십시오. 17. 로컬 활성화 상자를 선택하십시오. 따라서 여기에서 관련 키를 사용하면 DCOM Config를 통해 회색 영역에 액세스 할 수 있습니다. CLSID {D63B10C5-BB46-4990-A94F-E40B9D520160} APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276}
나는 1-15 단계를 거의 그대로 따라갈 수 있었다. 그러나, 제가 16 단계에 도착했을 때, 저는 그가 내가 원하는 것을 정확하게 말할 수 없었습니다. 처음에 DataKEEPER dave 사용자 계정에 RuntimeBroker에 모든 권한을 부여했으나 문제가 해결되지 않았습니다. 결국 세 가지 권한 모두에서 "기본값 사용"을 선택하고 문제가 해결되었습니다. 어떻게 또는 왜 이런 일이 일어 났는지 확신 할 수 없습니다. 나는 그것을 알아내는 데 다소 시간이 걸렸기 때문에 다시 일어날 경우에 대비하여 모든 것을 적어 두는 것이 더 낫다고 생각했습니다.
4 단계 – 배포 자동화
여러 시스템에서 동일한 경고를 활성화해야하는 경우 작업을 XML 파일로 내 보낸 다음 다른 시스템에서 가져옵니다. 또는 더 나은 아직. 다음 예제와 같이 파일 공유에서 XML 파일을 사용할 수있게 한 후 Powershell 스크립트를 통해 빌드 프로세스의 일부로 가져 오기를 자동화하십시오.
PS C : > Register-ScheduledTask -Xml (get-content '\ myfileshare tasks DataKeeperAlerts.xml'| 아웃 - 스트링) -TaskName "DataKeeperAlerts"- 사용자 datakeeper dave - 암호 MyDomainP @ 55W0rd - 포스
Windows Server 2016을 사용하여 Windows 이벤트에서 전자 메일 경고 트리거
다음 글에서는 지정한 서비스가 시작되거나 중지 될 때 알림을받는 방법을 알려 드리겠습니다. 물론 Service Control Monitor에서 EventID 7036을 모니터링 할 수 있습니다. 하지만 서비스가 시작되거나 중지 될 때마다 알림이 표시됩니다. 우리가 관심을 갖는 서비스가 시작되거나 중단 될 때에 만 알림을받을 수 있도록 좀 더 자세히 조사해야합니다. Windows 이벤트에서 전자 메일 경고 트리거와 같은 방법 기사에 관심이 있으시면 Windows Server 2010을 사용하여 여기를 클릭하십시오. Clusteringformeremortals.com에서 재현 한