windows AD域控密碼過期企業微信推送告警

二乘八是十六發表於2024-12-04

在寫了windows AD域控密碼過期郵件推送告警後,有網友問我能不能寫一篇關於企業微信推送的文章
如果需要看郵件推送或者需要自定義指令碼,可以參考我的文章 windows AD域控密碼過期郵件通知迭代版本

1.企業微信告警要求

1.1.企業微信推送需要具備的條件

  • 需要在企業微信中建立企業微信應用,企業微信的應用建立可以參考:zabbix第三篇-zabbix配置企業微信告警
  • 需要在AD域內找一個引數寫上企業微信userid,以便將資訊傳送至對應的人員

1.2.AD域控內新增企業微信userid值

  • 我再這裡使用web page屬性配置為企業微信userid值

  • 使用者的userid值,可以透過企業微信的通訊錄匯出

2.powersshell透過企業微信傳送的指令碼

# 引入Activedirectory模組
Import-Module ActiveDirectory

# 強制使用 TLS 1.2,企業微信介面只支援TLS1.2及以上版本
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# 企業微信的CorpID
$corpID = "corpID"
# 企業微信應用的應用的Secret
$corpSecret = "corpSecret"
# 企業微信應用的ID
$agentID = "agentID"

# 獲取訪問令牌
$authUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpID&corpsecret=$corpSecret"
$authResponse = Invoke-RestMethod -Uri $authUrl -Method Get
$accessToken = $authResponse.access_token

# 篩選合規使用者
$alladuser = Get-ADUser -SearchBase "DC=SEC,DC=lab" -Filter {Enabled -eq $true  -and PasswordNeverExpires -eq $false} | %{$_.SamAccountName}

#################################################
# 檢測AD密碼過期時間並透過企業微信通知相應賬戶和管理員
#################################################
foreach ($user in $alladuser) {
    $userpassinfo = Get-ADUser $user -Properties msDS-UserPasswordExpiryTimeComputed
    $pwdExpiryTimeFileTime = $userpassinfo.'msDS-UserPasswordExpiryTimeComputed'
    $userweixin = Get-ADUser $user -Properties * | %{$_.wWWHomePage}
    $userdisName = Get-ADUser $user -Properties * | %{$_.DisplayName}
    $pwdExpiryTime = [datetime]::FromFileTime([int64]$pwdExpiryTimeFileTime)
    $now = Get-Date
    $expire_days = ($pwdExpiryTime - $now).Days
    if ($expire_days -eq 15 -and $userweixin) {
        $chineseusername = Get-ADUser $user -Properties * | %{$_.DisplayName}
        # 企業微信訊息正文
        $weixinMessageBody =
        "親愛的 $chineseusername 同學:`r`n`r`n" +
        "您的域賬戶密碼即將在 $expire_days 天后過期,$pwdExpiryTime 之後密碼過期未修改會導致您無法連線使用域賬號登陸各種系統請您儘快更改。`r`n`r`n" +
    
		"重置密碼過程請遵循以下原則:`r`n" +
		"○ 密碼長度最少 8 位;`r`n" +
		"○ 密碼可使用最長時間 90天,過期需要更改密碼;`r`n" +
		"○ 密碼不得重新設定為初始密碼;`r`n" +
		"○ 強制密碼歷史 2個(不能使用之前最近使用的 2 個密碼);`r`n`r`n" +
		"○ 密碼符合複雜性需求(大寫字母、小寫字母、數字和符號四種中必須有三種、且密碼口令中不得包括全部或部分使用者名稱)`r`n" +
    
		"密碼修改系統如下:`r`n" +
		"○ 修改密碼連線:密碼修改的URL `r`n" +
		"○ 重置密碼連結:密碼重置系統的URL `r`n" +

		"謝謝,祝您生活愉快!" 


        # 構建企業微信訊息體
        $weixinMessage = @{
            "touser"   = $userweixin
            "msgtype" = "text"
            "agentid" = $agentID
            "text"    = @{
                "content" = $weixinMessageBody
            }
            "safe"    = 0
        } | ConvertTo-Json -Depth 10

        # 使用 UTF-8 編碼傳送請求
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($weixinMessage)

        # 傳送企業微信訊息
        $weixinUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$accessToken"
        Invoke-RestMethod -Uri $weixinUrl -Method Post -Body $bytes -ContentType "application/json"
    }
    elseif ($expire_days -le 2 -and $userweixin) {
        $chineseusername = Get-ADUser $user -Properties * | %{$_.DisplayName}
        # 企業微信訊息正文
        $weixinMessageBody =
        "親愛的 $chineseusername 同學:`r`n`r`n" +
        "您的域賬戶密碼即將在 $expire_days 天后過期,$pwdExpiryTime 之後密碼過期未修改會導致您無法連線使用域賬號登陸各種系統請您儘快更改。`r`n`r`n" +
    
		"重置密碼過程請遵循以下原則:`r`n" +
		"○ 密碼長度最少 8 位;`r`n" +
		"○ 密碼可使用最長時間 90天,過期需要更改密碼;`r`n" +
		"○ 密碼不得重新設定為初始密碼;`r`n" +
		"○ 強制密碼歷史 2個(不能使用之前最近使用的 2 個密碼);`r`n`r`n" +
		"○ 密碼符合複雜性需求(大寫字母、小寫字母、數字和符號四種中必須有三種、且密碼口令中不得包括全部或部分使用者名稱)`r`n" +
    
		"密碼修改系統如下:`r`n" +
		"○ 修改密碼連線:密碼修改的URL `r`n" +
		"○ 重置密碼連結:密碼重置系統的URL `r`n" +

		"謝謝,祝您生活愉快!" 


        # 構建企業微信訊息體
        $weixinMessage = @{
            "touser"   = $userweixin
            "msgtype" = "text"
            "agentid" = $agentID
            "text"    = @{
                "content" = $weixinMessageBody
            }
            "safe"    = 0
        } | ConvertTo-Json -Depth 10

        # 使用 UTF-8 編碼傳送請求
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($weixinMessage)

        # 傳送企業微信訊息
        $weixinUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$accessToken"
        Invoke-RestMethod -Uri $weixinUrl -Method Post -Body $bytes -ContentType "application/json"
    }
}

3.企業微信告警的驗證

  • 在ad域機器上執行該指令碼後,就可以推送相關訊息

4.定時執行指令碼

  • 在定時任務中新建定時任務,定時執行powershell指令碼

相關文章