最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

0基礎上手python編程,實踐windows域用戶過期郵件通知

2022-08-30 21:18 作者:王忘杰-王土狗  | 我要投稿

全民制作人大家好,我是學習python兩天半的練習生王忘杰,喜歡路由交換、linux、網絡安全,開整!在此之前我并沒有編程經驗,對于python我花了半天時間看了www.runoob.com/python3的教程,看完第五節(jié)基本語法,發(fā)現(xiàn)python與bash腳本基本相同,因此安裝完PyCharm后直接開始了代碼編寫。

本文目標,0基礎使用python語言完成對windows域用戶超過60天未修改密碼的進行郵件通知。

一、代碼思路
1、獲取windows域用戶名、上次修改密碼時間、郵箱
2、使用python計算修改密碼時間是否超過60天
3、超過60天發(fā)送郵件通知
4、使用異常處理語句,防止程序崩潰
5、完整編譯、定期執(zhí)行、定期檢查

二、獲取windows域用戶信息
百度查詢,獲得powershell命令

Get-ADUser -Filter 'Name -like "*"' -Properties *

Get-ADUser是powershell域管理的用戶管理命令,此條命令可以列出全部域用戶信息

因為我們只需要用戶名、上次修改密碼時間和郵箱,因此使用powershell管道符加Select-Object篩選出name,passwordlastset,SamAccountName即可

Get-ADUser -Filter 'Name -like "*"' -Properties * | Select-Object name,passwordlastset,SamAccountName

此時的結果為這種格式

1 11

admin ? ? ? ? 2021/11/30 22:15:20 admin
test ? ? ? ? 2022/4/20 11:00:23 ?test ? ?

通過重定向將結果導出到本地,使用python進行后續(xù)工作,也可以直接用python執(zhí)行powershell,看完本文你就懂了。

Get-ADUser -Filter 'Name -like "*"' -Properties * | Select-Object name,passwordlastset,SamAccountName > 1.txt

三、開始計算
1、讀取本地1.txt
有困難,先百度,文章里所有代碼都是按想法去百度的,使用open()函數(shù)打開本地文件

f = open("C:\\Users\admin\Desktop\/1.txt", "r", encoding='utf-16')

因為文本有很多行,所以需要使用readlines()函數(shù)來按行存儲,此函數(shù)會以每一行為單位構建一個列表

lines = f.readlines()
print(lines)

此時輸出結果為

['1\n', '\n', 'admin ? ? ? ? 2021/11/30 22:15:20 admin\n', 'test ? ? ? ? 2022/4/20 11:00:23 ?test ? ? \n']

我們構建for循環(huán)來輸出每一行的內容

for line in lines:
? ?print(line)

輸出結果就變成了



admin ? ? ? ? 2021/11/30 22:15:20 admin

test ? ? ? ? 2022/4/20 11:00:23 ?test ? ?

2、分割字符,計算時間
我們使用strptime()函數(shù)來進行時間差計算,為此我們需要把每一行進行字符分割,提取有用的信息,而strptime()函數(shù)的日期格式是2021-11-30,與AD默認導出的2021/11/30不同,所以需要進行字符替換。

此時我們for循環(huán)變成了

for line in lines:
? ?x = line.replace("/", "-")
? ?y = x.split()
? ?time_1 = y[1]
? ?print(time)

注意,因為文本里有空格,運行會報錯,所以我們要做的是進行異常處理。

? ?time_1 = y[1]
IndexError: list index out of range

使用try進行異常處理,修改for代碼為

for line in lines:
? ?try:
? ? ? ?x = line.replace("/", "-")
? ? ? ?y = x.split()
? ? ? ?time_1 = y[1]
? ? ? ?print(time_1)
? ?except:
? ? ? ?print("錯誤行")

運行結果

錯誤行
錯誤行
2021-11-30
2022-4-20

for代碼解釋

for line in lines: #每次for循環(huán)將lines中的一行賦予line
? ?try: #異常處理,正常的執(zhí)行,錯誤的跳轉except
? ? ? ?x = line.replace("/", "-") #使用replace()函數(shù)將line中的/替換為-,將結果賦予x,從[admin ? ? ? ? 2021/11/30 22:15:20 admin]替換為[admin ? ? ? ? 2021-11-30 22:15:20 admin]
? ? ? ?y = x.split() #使用split()將x使用空格分割,從[admin ? ? ? ? 2021-11-30 22:15:20 admin]分割為[admin][2021-11-30][22:15:20][admin]
? ? ? ?time_1 = y[1] #提取第二個字符,注意是0、1、2,所以1就是第二個字符
? ? ? ?print(time_1) #打印2021-11-30,打印僅僅是為了從終端觀察運行結果
? ?except:
? ? ? ?print("錯誤行") #打印僅僅是為了從終端觀察運行結果

獲取當前日期,使用time()函數(shù),使用strftime()函數(shù)格式化為 年-月-日格式方便計算,此函數(shù)import time引用

print(time.strftime("%Y-%m-%d", time.localtime()))

3、計算時間差
使用datetime計算時間差,from datetime import datetime引用,只有datetime格式化后的日期才能減出時間差

for line in lines:
? ?try:
? ? ? ?x = line.replace("/", "-")
? ? ? ?y = x.split()
? ? ? ?time_1 = y[1]
? ? ? ?time_2 = time.strftime("%Y-%m-%d", time.localtime())
? ? ? ?time_1 = datetime.strptime(time_1, "%Y-%m-%d")
? ? ? ?time_2 = datetime.strptime(time_2, "%Y-%m-%d")
? ? ? ?day = (time_2 - time_1).days #提取日期
? ? ? ?print(day) #打印日期
? ?except:
? ? ? ?print("錯誤行")

運行結果

273
132

4、判斷是否大于60天
很簡單了,一個if搞定

print(day)
? ? ? ?if day > 60: #大于60天
? ? ? ? ? ?day = str(day) #上面獲取的day是int類型,必須轉換成文本,否則無法運行,編輯器會提示錯誤
? ? ? ? ? ?print('密碼'+ day +'天未修改') #打印內容
? ? ? ?else:
? ? ? ? ? ?print('未過期')

運行結果

密碼273天未修改
密碼132天未修改

5、豐滿內容,拼接出我們真正要的信息
姓名、過期時間、郵箱,從y的第一位取出用戶名,最后一位取出郵箱拼接起來

? ? ? ?if day > 60:
? ? ? ? ? ?day = str(day)
? ? ? ? ? ?username = y[0]
? ? ? ? ? ?usermail = (y[3] + '@90apt.com') #拼接郵箱
? ? ? ? ? ?print('用戶 '+username+' 密碼'+ day +'天未修改 郵箱為'+usermail)
? ? ? ?else:
? ? ? ? ? ?print('未過期')

運行結果

用戶 admin 密碼273天未修改 郵箱為admin@90apt.com
用戶 test 密碼132天未修改 郵箱為test@90apt.com

四、發(fā)送郵件
百度一下,直接加進去,發(fā)送郵件所需要的東西我們都有了
用戶名就是username,天數(shù)day,郵箱我們通過拼接usermail形成完整郵箱了

使用SMTP單獨發(fā)件測試,其實不需要知道內容,拿來用就行了

from email.header import Header
from email.mime.text import MIMEText

mail_host = "smtp.mxhichina.com" ?# 設置服務器
mail_user = "admin@90apt.com" ?# 用戶名
mail_pass = "passwd" ?# 口令

sender = 'admin@90apt.com'
receivers = (usermail) ?# 接收郵件,可設置為你的QQ郵箱或者其他郵箱

message = MIMEText('親愛的 ' + username + ' 域用戶 :\n\
您的計算機域賬戶已經超過' + day + '天沒有修改密碼了', 'plain', 'utf-8')
?message['From'] = Header("域用戶密碼超期安全提醒", 'utf-8')
?message['To'] = Header(username, 'utf-8')
?subject = '域用戶密碼超期安全提醒'
?message['Subject'] = Header(subject, 'utf-8')

?try:
? ?smtpObj = smtplib.SMTP()
? ?smtpObj.connect(mail_host, 25) ?# 25 為 SMTP 端口號
? ?smtpObj.login(mail_user, mail_pass)
? ?smtpObj.sendmail(sender, receivers, message.as_string())
? ?print(username + "郵件發(fā)送成功")
?except smtplib.SMTPException:
? ?print("Error: 無法發(fā)送郵件")

運行后列表里的人會收到郵件

五、小優(yōu)化
郵件別發(fā)的太快,容易被封號,在for循環(huán)里加個time.sleep(3),運行一次等待3秒

六、完整代碼、編譯、定時任務
就算了,大家看完上面肯定就會了,隨便寫寫就比我寫更規(guī)范。編譯,那不是百度一下就行,定時任務就更簡單了,這里就不說了。

七、最后
不會寫代碼的網工不是好系統(tǒng)運維



0基礎上手python編程,實踐windows域用戶過期郵件通知的評論 (共 條)

分享到微博請遵守國家法律
江油市| 娱乐| 和龙市| 苏尼特右旗| 长武县| 英德市| 乐亭县| 赣州市| 若尔盖县| 辽宁省| 康乐县| 卢氏县| 大邑县| 布尔津县| 浦城县| 招远市| 深圳市| 濮阳市| 新建县| 绥德县| 南部县| 鄂伦春自治旗| 凤台县| 浏阳市| 双鸭山市| 同江市| 鹿泉市| 盐津县| 湘潭市| 太原市| 华蓥市| 东乌| 汶上县| 东光县| 渝中区| 武鸣县| 长治县| 临安市| 商洛市| 太原市| 宁夏|