Thaiadmin

ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ ths

  • *****
  • 242
  • 0
ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« เมื่อ: 29 กุมภาพันธ์ 2012, 10:45:24 »
รบกวนสอบถามเกี่ยวกับ Script Powershell ครับ

เนื่องจากผมต้องการ Monitor DC ในแต่ละ Site เป็น Addtional Domain และทุก DC อยู่ใน Forest เดียวกันครับ
ซึ่งได้ใช้สคริป Power shell ด้านล่างครับ ซึ่งผมนำตัวอย่างสคริปจาก http://technodrone.blogspot.com/2010/04/monitor-ad-replication-status-with.html และได้ทดลองรันสคริปดังกล่าว โดย Concept ผลที่ได้มันจะ Convert Result ของ Status Replication DC จาก CSV -- > HTML ด้วยช่องทาง E-Mail แต่เมื่อผมทดสอบมันไม่มีเมล์เข้ามาครับ
หรือท่านใดพอมีแนวทางอื่นรบกวนแนะนำด้วยครับ

# ==============================================================================================
# NAME: Check-Replication
#
# AUTHOR: Maish Saidel-Keesing
# DATE : 27/04/2010
#
# COMMENT: Will check the replication status and if there are failures will send an email to the
# Assigned Addresses.
# ** Requires Repadmin from the Windows resource Kit accessible in the default path **
# ==============================================================================================

#$from = "Replication Status<my_address@my_dommain>"
#$to = "Maish<my_address@my_dommain>"
#Collect the replication info

#Check the Replication with Repadmin
$workfile = E:\APPS\Support_Tools\repadmin.exe /showrepl my_domain* /csv

$results = ConvertFrom-Csv -InputObject $workfile | where {$_.'Number of Failures' -ge 1}
$strOutFile = "E:\SCRIPTSCheck-Replication\Check-Replication.htm"

#Here you set the tolerance level for the report
$results = $workfile | where {$_.'Number of Failures' -gt 1 }

if ($results -ne $null ) {
$results = $results | select "Source DC", "Naming Context", "Destination DC" ,"Number of Failures", "Last Failure Time", "Last Success Time", "Last Failure Status" | ConvertTo-Html
} else {
$results = "There were no Replication Errors"
}
#Send-MailMessage -From $from -To $to -Subject "Daily Forest Replication Status" -SmtpServer "my_smtp_server" -BodyAsHtml ($results | Out-String)

$filedate = get-date
$filedate = $filedate.ToString()

$results = "" + $filedate + "
" + $results + "
"
$results | Out-File $strOutFile

Thx for any hlep.
</my_address@my_dommain></my_address@my_dommain>

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

ออฟไลน์ B.Pharapat

  • *****
  • 4,820
  • 15
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #1 เมื่อ: 29 กุมภาพันธ์ 2012, 10:58:11 »
#$from = "Replication Status<my_address@my_dommain>"
#$to = "Maish<my_address@my_dommain>"

คุณได้เอาเครื่องหมาย # ออกยังครับ แล้วได้ แก้เป็น mail ที่คุณต้องการรับ ต้องการส่งหรือยัง

ออฟไลน์ ths

  • *****
  • 242
  • 0
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #2 เมื่อ: 29 กุมภาพันธ์ 2012, 11:44:46 »
#$from = "Replication Status<my_address@my_dommain>"
#$to = "Maish<my_address@my_dommain>"

คุณได้เอาเครื่องหมาย # ออกยังครับ แล้วได้ แก้เป็น mail ที่คุณต้องการรับ ต้องการส่งหรือยัง

จริงๆผมไม่ได้ใส่ # ครับ แต่ให้ข้อมูลผิดในตอนแรกครับ ต้องขอโทษทีครับ
รบกวนดูสคริปจากด้านล่างอีกครั้งครับ

โดยขั้นตอนนั้นผม Save Script ดังกล่าวเป็น repdc.ps1 และเปิด Powershell บนเครื่อง DC และ run comand ด้วย get-command /.repdc.ps1 แต่มันไม่ส่งเมล์ Result ให้อ่ะครับ ไม่แน่ใจว่าติดตรงไหนอ่ะครับ
# ==============================================================================================
# NAME: Check-Replication

# AUTHOR: Maish Saidel-Keesing
# DATE  : 27/04/2010

# COMMENT: Will check the replication status and if there are failures will send an email to the
# Assigned Addresses.
# ** Requires Repadmin from the Windows resource Kit accessible in the default path **
# ==============================================================================================
 
$from = "Replication Status<my_address@my_dommain>"
$to = "Maish<my_address@my_dommain>"
#Collect the replication info
 
#Check the Replication with Repadmin
$workfile = D:\Support\repadmin.exe /showrepl * /csv 
$results = ConvertFrom-Csv -InputObject $workfile | where {$_.'Number of Failures' -ge 1}
 
 
#Here you set the tolerance level for the report
$results = $results | where {$_.'Number of Failures' -gt 1 }
 
if ($results -ne $null ) {
    $results = $results | select "Source DC", "Naming Context", "Destination DC" ,"Number of Failures", "Last Failure Time", "Last Success Time", "Last Failure Status" | ConvertTo-Html
    } else {
    $results = "There were no Replication Errors"
}
 
Send-MailMessage -From $from -To $to -Subject "Daily Forest Replication Status" -SmtpServer "my_smtp_server" -BodyAsHtml ($results | Out-String)
กลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอระงับการใช้ลายเซ็นต์รูปภาพ
อนุญาตให้ใช้ได้เพียง ลายเซ็นต์ที่เป็นข้อความ
จึงประกาศมาเพื่อขอความร่วมมือ จากสมาชิกทุกๆ ท่าน
ในนาม กลุ่มผู้ดูแลระบบแห่งประเทศไทย

ออฟไลน์ B.Pharapat

  • *****
  • 4,820
  • 15
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #3 เมื่อ: 29 กุมภาพันธ์ 2012, 12:39:27 »
ขอดู error log ที่มัน error ขึ้นมาหน่อย ครับ  ;)

ออฟไลน์ ths

  • *****
  • 242
  • 0
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #4 เมื่อ: 29 กุมภาพันธ์ 2012, 13:33:57 »
ขอดู error log ที่มัน error ขึ้นมาหน่อย ครับ  ;)

อัพเดรตครับ ล่าสุดตอนนี้หลังจากผมรัน Script ใน Powershell โดยรัน ไฟล์ script.ps1 นั้น มันส่งเมล์ให้แล้วครับ แต่มีเพียง  "There were no Replication Errors" ในเมล์ Body เท่านั้นครับ ซึ่งไม่มีไฟล์แนบ ที่เป็น Result Replication มาให้
เข้าใจว่าน่าจะติดปัญหาเรื่องการ Convert จาก CSV เป็น HTML ในบรรทัดที่เป็นสีแดงครับ
โดย Script ล่าสุดเป็นดังนี้ครับ

#==============================================================================================
# NAME: Check-Replication

# AUTHOR: AUTHOR: Maish Saidel-Keesing
# DATE  : 24/02/2012

# COMMENT: Will check the replication status and if there are failures will send an email to the
# Assigned Addresses.
# ** Requires Repadmin from the Windows resource Kit accessible in the default path **
# ==============================================================================================
 
$from = "<my_address@my_dommain>"
$to = "<my_address@my_dommain>"
#Collect the replication info
 
#Check the Replication with Repadmin
$workfile = "c:\Program Files\Support Tools\repadmin.exe /showrepl * /csv"
$results = ConvertFrom-Csv -InputObject $workfile | where {$_.'Number of Failures' -ge 1}
$strOutFile = "C:\RepData\Check-Replication.htm"



 
 
#Here you set the tolerance level for the report
$results = $results | where {$_.'Number of Failures' -gt 1 }
 
if ($results -ne $null ) {
    $results = $results | select "Source DC", "Naming Context", "Destination DC" ,"Number of Failures", "Last Failure Time", "Last Success Time", "Last Failure Status" | ConvertTo-Html
    } else {
    $results = "There were no Replication Errors"
}
 
Send-MailMessage -From $from -To $to -Subject "Daily Forest Replication Status" -SmtpServer "my_smtp_server" -BodyAsHtml ($results | Out-String)

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

ออฟไลน์ B.Pharapat

  • *****
  • 4,820
  • 15
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #5 เมื่อ: 29 กุมภาพันธ์ 2012, 14:04:24 »
เท่าที่ดู จาก link script เขาก็ไม่ได้ report mail เป็น file แนบ อยู่แล้วนะครับ แต่ว่าใน กรณีที่ มัน rep ปกติ มันจะมี ข้อความ There were no Replication Errors  ใน mail
แต่ถ้ามัน rep มีปัญหา มันถึงจะบอกว่า fail เท่าไร ประมาณนี้นะครับ

http://technodrone.blogspot.com/2010/04/monitor-ad-replication-status-with.html

ออฟไลน์ ths

  • *****
  • 242
  • 0
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #6 เมื่อ: 29 กุมภาพันธ์ 2012, 14:15:57 »
แล้วจากรูปในไฟล์แนบอ่ะครับ คือผมอยากได้รีพอร์ตแบบนี้อ่ะครับ ต้องทดสอบอย่างไรเอ่ย ?

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

ออฟไลน์ B.Pharapat

  • *****
  • 4,820
  • 15
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #7 เมื่อ: 29 กุมภาพันธ์ 2012, 14:19:37 »
เดี๋ยวไว้ ขอลองก่อนนะครับ เดี๋ยวช่วยหาวิธีให้ ครับ  :)

ออฟไลน์ ths

  • *****
  • 242
  • 0
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #8 เมื่อ: 29 กุมภาพันธ์ 2012, 14:25:53 »
ขอบคุณมากครับ ถ้ายังไงผมทดลองแล้วมีความคืบหน้าอย่างไร จะอัพเดรตให้เช่นกันครับ
เชื่อว่าสคริปดังกล่าวน่าจะเป็นประโยชน์กับหลายๆคนที่มี โดเมน หลายๆ Site ครับ

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

ออฟไลน์ B.Pharapat

  • *****
  • 4,820
  • 15
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #9 เมื่อ: 1 มีนาคม 2012, 16:36:51 »
เท่าที่ ทดลองนะครับ ใช้งานได้แล้วนะครับ
ใส่ เครื่อง หมาย # ที่หน้าบรรทัดนี้นะครับ $results = $results | where {$_.'Number of Failures' -gt 1 }

ที่บรรทัด
 $results = $results | select "Source DC", "Naming Context", "Destination DC" ,"Number of Failures", "Last Failure Time", "Last Success Time", "Last Failure Status" | ConvertTo-Html

แก้เป็น
 $results = $results | select "Source DSA", "Naming Context", "Destination DSA" ,"Number of Failures", "Last Failure Time", "Last Success Time", "Last Failure Status" | ConvertTo-Html

ถ้าไม่แก้ ตรง Source และ destination มันจะไม่ถูกแสดงรายชื่อ DC ครับ เพราะว่า column ชื่อไม่ตรงกันกับ csv ครับ


ออฟไลน์ ths

  • *****
  • 242
  • 0
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #10 เมื่อ: 1 มีนาคม 2012, 21:27:35 »
ผมลองแก้ตามที่แนะนำแล้วครับ แต่เมื่อรันแล้ว มันส่งเมล์มาให้อย่างเดียวครับ ไม่มีไฟล์ Result แนบมาให้อ่ะครับ

และเมื่อเข้าไปดูไฟล์ที่มันควรจะ ConvertCSV to htm
บรรทัด ($strOutFile = "C:\RepData\Check-Replication.htm"
ก็ไม่มีไฟล์อะไรเลยในโฟลเดอร์ C:\RepData ครับ

ไม่แน่ใจว่าที่คุณ B.Pharapat ทดสอบนั้นมันส่งเมล์ Result มาในไฟล์แนบเป็น HTML ไฟล์หรือเปล่าครับ
ถ้าได้รบกวนส่งไฟล์ Scritp ตัวอย่างให้ผมทดสอบหน่อยได้ไหมครับ

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

ออฟไลน์ B.Pharapat

  • *****
  • 4,820
  • 15
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #11 เมื่อ: 2 มีนาคม 2012, 13:07:29 »
ผมลองแก้ตามที่แนะนำแล้วครับ แต่เมื่อรันแล้ว มันส่งเมล์มาให้อย่างเดียวครับ ไม่มีไฟล์ Result แนบมาให้อ่ะครับ

และเมื่อเข้าไปดูไฟล์ที่มันควรจะ ConvertCSV to htm
บรรทัด ($strOutFile = "C:\RepData\Check-Replication.htm"
ก็ไม่มีไฟล์อะไรเลยในโฟลเดอร์ C:\RepData ครับ

ไม่แน่ใจว่าที่คุณ B.Pharapat ทดสอบนั้นมันส่งเมล์ Result มาในไฟล์แนบเป็น HTML ไฟล์หรือเปล่าครับ
ถ้าได้รบกวนส่งไฟล์ Scritp ตัวอย่างให้ผมทดสอบหน่อยได้ไหมครับ

ขอบคุณมากครับ


ผมได้ แนบ ตัวอย่าง mail ที่ แบบ repl ปกติ และ แบบที่ repl ไม่ได้  รวมถึง script  ให้แล้ว ครับ
ส่วนที่มา script  ref. http://technodrone.blogspot.com/2010/04/monitor-ad-replication-status-with.html

ออฟไลน์ ths

  • *****
  • 242
  • 0
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #12 เมื่อ: 3 มีนาคม 2012, 11:33:37 »
ได้แล้วครับ ขอบคุณครับ แต่ติดปัญหาอยู่นิดนึง เรื่อง smtp authen เพราะตัวสคริปจะใช้ได้กับ Mail ที่ไม่ได้เปิด Secure Authen เท่านั้นครับ แต่ไม่เป็นไรครับ เดี๋ยวผมลองหา Script Powershell Smtp Authen
กลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอระงับการใช้ลายเซ็นต์รูปภาพ
อนุญาตให้ใช้ได้เพียง ลายเซ็นต์ที่เป็นข้อความ
จึงประกาศมาเพื่อขอความร่วมมือ จากสมาชิกทุกๆ ท่าน
ในนาม กลุ่มผู้ดูแลระบบแห่งประเทศไทย

ออฟไลน์ B.Pharapat

  • *****
  • 4,820
  • 15
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #13 เมื่อ: 3 มีนาคม 2012, 11:38:11 »
ได้แล้วครับ ขอบคุณครับ แต่ติดปัญหาอยู่นิดนึง เรื่อง smtp authen เพราะตัวสคริปจะใช้ได้กับ Mail ที่ไม่ได้เปิด Secure Authen เท่านั้นครับ แต่ไม่เป็นไรครับ เดี๋ยวผมลองหา Script Powershell Smtp Authen

ใช้กับ exchange หรือ เปล่าครับ ถ้า เป็น exchange 2007 หรือ 2010 สร้าง receipt connector ใหม่ขึ้นมาดูครับ แล้ว ก็ allow ip เครื่องที่ run scipt ว่าไม่ต้อง authen ก่อนส่ง
ถ้าเป็น mail server ตัวอื่นน่าจะอยู่ใน mode ของพวก mail relay allow host ครับ

ออฟไลน์ ths

  • *****
  • 242
  • 0
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #14 เมื่อ: 3 มีนาคม 2012, 14:34:48 »
ได้แล้วครับ ขอบคุณมากครับผม
และต้องขอบคุณแทนคนอื่นๆ ที่จะได้ใช้ประโยชน์กับสคริปนี้ด้วยครับ

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

ออฟไลน์ momaydopod

  • *****
  • 764
  • 1
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #15 เมื่อ: 6 ธันวาคม 2013, 15:02:33 »
ตอนนี้ผมลองรันดูแล้วมัน error แบบนี้นะครับ


ของผม DC 2008x64 ครับ  BDC 2008x64
Power shell 1.0 ครับ


สอบถามเพิ่มเติมถ้า email ไม่ได้ใช้ exchange  ครับ  SMTP เป็น port 2525  ต้องไปแก้ code ตรงไหนครับ
« แก้ไขครั้งสุดท้าย: 6 ธันวาคม 2013, 15:45:27 โดย momaydopod »

ออฟไลน์ momaydopod

  • *****
  • 764
  • 1
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #16 เมื่อ: 8 ธันวาคม 2013, 10:51:38 »
รองรัยแบบ คำสั่ง  ก็ปกติ คำสั่งทำงานแต่ถ้ารันแบบ Script ดัน error :'(


PS C:\Users\Administrator> c:\rep\repadmin.exe /showrepl * /csv
showrepl_COLUMNS,Destination DC Site,Destination DC,Naming Context,Source DC Site,Source DC,T
lures,Last Failure Time,Last Success Time,Last Failure Status
showrepl_INFO,Default-First-Site-Name,DC1,"DC=contoso,DC=com",Default-First-Site-Name,DC2,RPC
showrepl_INFO,Default-First-Site-Name,DC1,"CN=Configuration,DC=contoso,DC=com",Default-First-
12-08 10:46:42,0
showrepl_INFO,Default-First-Site-Name,DC1,"CN=Schema,CN=Configuration,DC=contoso,DC=com",Defa
,0,0,2013-12-08 10:46:42,0
showrepl_INFO,Default-First-Site-Name,DC1,"DC=DomainDnsZones,DC=contoso,DC=com",Default-First
-12-08 10:46:42,0
showrepl_INFO,Default-First-Site-Name,DC1,"DC=ForestDnsZones,DC=contoso,DC=com",Default-First
-12-08 10:46:42,0
showrepl_INFO,Default-First-Site-Name,DC2,"DC=contoso,DC=com",Default-First-Site-Name,DC1,RPC
showrepl_INFO,Default-First-Site-Name,DC2,"CN=Configuration,DC=contoso,DC=com",Default-First-
12-08 10:30:14,0
showrepl_INFO,Default-First-Site-Name,DC2,"CN=Schema,CN=Configuration,DC=contoso,DC=com",Defa
,0,0,2013-12-08 10:30:14,0
showrepl_INFO,Default-First-Site-Name,DC2,"DC=DomainDnsZones,DC=contoso,DC=com",Default-First
-12-08 10:35:54,0
showrepl_INFO,Default-First-Site-Name,DC2,"DC=ForestDnsZones,DC=contoso,DC=com",Default-First
-12-08 10:35:51,0
PS C:\Users\Administrator>

ออฟไลน์ momaydopod

  • *****
  • 764
  • 1
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #17 เมื่อ: 14 มกราคม 2014, 13:59:37 »
ขอแชร์นะครับ   เห็นว่า script run ได้แล้ว


step
เปิด powershell บน DC run as admin ครับ
1.copy คำสั่ง  Set-ExecutionPolicy RemoteSigned   กด Y
2.สร้าง folder c:\rep
3.copy program repadmin.exe ที่อยู่ใน  support tools ของ windows 2003 ครับมาไว้ใน fodler ครับ
4. Save script เป็น .ps1
5. run ได้เลยครับ


อ้างถึง
#========================================================================
# Created on:   24/08/2012
# Created by:   AUGAGNEUR Alexandre
# Filename:     Repadmin-ShowRepl-HTMLReports.ps1
#
# Description:   Generate HTML reports based on
#            "repadmin /showrepl * /csv" command return,
#            format it and send it by email
#========================================================================


###################################################
#      VARIABLES
###################################################

# Path of CSV/HTML exports
$ExportPath = "c:\rep"

# Path of Repadmin binary (only necessary if not found in $env:path)
$RepadminExec = $null

# Random name of CSV/HTML Export
$BaseFilename = "Repadmin-"+(Get-Date -Format yyMMdd)+"-"+(Get-Random)
$CSVFilename = $BaseFilename+".csv"
$HTMLFilename = $BaseFilename+".html"

# CSV Headers
$Header = "showrepl_COLUMNS","Destination DSA Site","Destination DSA","Naming Context","Source DSA Site","Source DSA", `
         "Transport Type","Number of Failures","Last Failure Time","Last Success Time","Last Failure Status"

# HTML Style
$style = @"
   <style>
      BODY{font-family:"Segoe UI"}
      P{text-decoration:underline;text-indent:40px;font-size:20px;color:DarkSlateGray;font-weight:bold}
      TABLE{border-width: 2px;border-style: solid;border-color: Black;border-collapse: collapse;}
      TABLE.error{border-color:red}
      TABLE.warning{border-color:darkorange}
      TABLE.success{border-color:green}
      TH{border-width: 2px;padding: 0px;border-style: solid;padding:5px}
      TD{border-width: 1px;padding: 0px;border-style: solid;text-align:center}
      TH.error{border-color:red;background-color:salmon}
      TH.warning{border-color:darkorange;background-color:orange}
      TH.success{border-color:green;background-color:limegreen}
      TD.error{border-color: red}
      TD.warning{border-color:darkorange}
      TD.success{border-color:green}
   </style>
"@

# Email notification parameters
$Sender = "youremail"
$Recipient = "youremail","youremail" # You can specify an array if needed
$Server = "smtpserver"

###################################################
#      FUNCTIONS
###################################################

function EmailNotification($Sender, $Recipient, $Server, $Subject, $Body)
{
   $SMTPclient = new-object System.Net.Mail.SmtpClient $Server

   # SMTP Port (if needed)
     $SMTPClient.port =

   # Enabling SSL (if needed)
    #$SMTPclient.EnableSsl = $true

   # Specify authentication parameters (if needed)
    #$SMTPAuthUsername = ""
    #$SMTPAuthPassword = ""
    #$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPAuthUsername, $SMTPAuthPassword)

   $Message = new-object System.Net.Mail.MailMessage
   $Message.From = $Sender
   $Recipient | %{ $Message.To.Add($_) }
   $Message.Subject = $Subject
   $Message.Body = $Body
   $Message.IsBodyHtml = $true
   
   $SMTPclient.Send($Message)
}


###################################################
#      MAIN
###################################################

# Construct CSV file full path
$CSVExport = Join-Path $ExportPath $CSVFilename

# Find repadmin binary if not defined
if ( !($RepadminExec) )
{
   foreach ( $path in ($env:path).split(";") )
   {
      if (Test-Path $path\repadmin.exe)
      {
         $RepadminExec = "$path\repadmin.exe"
      }
   }
}

if ( $RepadminExec )
{
   # Command to generate replications status
   $StrCmd = "$RepadminExec /showrepl * /csv"
   
   # Generate CSV output
   Invoke-Expression $StrCmd | Out-File $CSVExport
   
   if ( Test-Path $CSVExport )
   {
      $ReplicationsState = Import-Csv -Path $CSVExport -Header $Header -Delimiter ","

      $ServersInError = @()
      $ErrorContent = @()

      # Filtering error messages
      $ReplicationsState | Where-Object { $_."showrepl_COLUMNS" -match "showrepl_ERROR" } | %{
         if ($_.showrepl_COLUMNS -match "showrepl_ERROR") {
            $ServersInError += $_."Destination DSA"
            $ErrorContent += $_
         }
      }

      # Format errors content
      if ( $ErrorContent )
      {
         $MailObject="AD REPLICATIONS STATUS - $(Get-Date -Format yy/MM/dd) - error(s) found"

         $MailBody += $ErrorContent | Select-Object -Property "Destination DSA",@{ Name="Error Message"; Expression={ $_."Naming Context" } } | ConvertTo-Html -As table -Fragment -PreContent "<p>AD Replications status with errors</p>" -PostContent "<br><br>" | Out-String
         $MailBody = $MailBody.Replace("<th>","<th class=""error"">")
         $MailBody = $MailBody.Replace("<td>","<td class=""error"">")
         $MailBody = $MailBody.Replace("<table>","<table class=""error"">")
      }
      
      # Filtering warning messages
      $WarningContent = $ReplicationsState | Where-Object {  @("showrepl_ERROR","showrepl_COLUMNS") -notcontains $_."showrepl_COLUMNS" -and $_."Last Failure Status" -ne 0 }  
      
      # Format warning content
      if ( $WarningContent )
      {
         if (!$MailObject)
         {
            $MailObject="AD REPLICATIONS STATUS - $(Get-Date -Format yy/MM/dd) - warning(s) found"
         }
         
         $MailBody += $WarningContent | Select-Object -ExcludeProperty "showrepl_COLUMNS","Transport Type" -Property * | ConvertTo-Html -As table -Fragment -PreContent "<p>AD Replications status with warning</p>" -PostContent "<br><br>" | Out-String
         $MailBody = $MailBody.Replace("<th>","<th class=""warning"">")
         $MailBody = $MailBody.Replace("<td>","<td class=""warning"">")
         $MailBody = $MailBody.Replace("<table>","<table class=""warning"">")
      }

      # Filtering success messages (uncomment the line if you want to see them in the email report)
        $SuccessContent = $ReplicationsState | Where-Object { @("showrepl_ERROR","showrepl_COLUMNS") -notcontains $_."showrepl_COLUMNS" -and $_."Last Failure Status" -eq 0}

      # Format success content
      if ( $SuccessContent )
      {
         if (!$MailObject)
         {
            $MailObject="AD REPLICATIONS STATUS - $(Get-Date -Format yy/MM/dd) - OK"
         }
         
         $MailBody += $SuccessContent | select-object -ExcludeProperty "showrepl_COLUMNS","Transport Type" -Property * | ConvertTo-Html -As table -body "<p>AD Replications status with success</p>" -PreContent $style | Out-String
         $MailBody = $MailBody.Replace("<th>","<th class=""success"">")
         $MailBody = $MailBody.Replace("<td>","<td class=""success"">")
         $MailBody = $MailBody.Replace("<table>","<table class=""success"">")
      }

      # Generate HTML file (if wanted)
        $HTMLExport = Join-Path $ExportPath $HTMLFilename
         ConvertTo-Html -Head $style -body $MailBody -Title $MailObject | Out-File $HTMLExport
      
      if ( $MailBody )
      {
         EmailNotification $Sender $Recipient $Server $MailObject (ConvertTo-Html -Head $style -Body $MailBody -Title $MailObject | Out-String)
      }
   }
}

ออฟไลน์ momaydopod

  • *****
  • 764
  • 1
  • เพศ: ชาย
Re: ขอคำแนะนำวิธีการ Monitor AD Replication Status with Powershell
« ตอบกลับ #18 เมื่อ: 14 มกราคม 2014, 14:05:06 »
อีกตัวครับ


อ้างถึง
$from = "youremail"
$to = "youremail"
#Collect the replication info

#Check the Replication with Repadmin
$workfile = c:\rep\repadmin.exe /showrepl * /csv


$results = ConvertFrom-Csv -InputObject $workfile | where {$_.'Number of Failures' -ge 1}
$strOutFile = "c:\rep\Check-Replication.htm"


#Here you set the tolerance level for the report
#$results = $workfile | where {$_.'Number of Failures' -gt 1 }

if ($results -ne $null ) {
$results = $results | select "Source DC", "Destination DC", "Naming Context" , "Last Failure Time", "Last Success Time" | ConvertTo-Html
} else {
$results = "There were no Replication Errors"
}
Send-MailMessage -From $from -To $to -Subject "Daily Forest Replication Status" -SmtpServer "yoursmtpServer" -BodyAsHtml ($results | Out-String)

$filedate = get-date
$filedate = $filedate.ToString()

$results = "" + $filedate + "
" + $results + "
"
$results | Out-File $strOutFile