欢迎各位兄弟 发布技术文章
这里的技术是共享的
mail_arbitration.csv 的内容
SamAccountName,Manager
66E2190,75009126
R0019229,75009126
111278914,12200180
11193588,13301389
111118479,12200180
批量指定主管账号.ps1 的内容
好的,我将逐行详细解释这段PowerShell脚本的功能与逻辑。该脚本的目的在于从CSV文件中读取用户的 SamAccountName 和 Manager,更新Active Directory中的用户经理信息,并将结果以HTML格式发送至指定邮箱。
导入Active Directory模块:
powershellImport-Module activedirectory
这一行加载ActiveDirectory模块,以便使用其中的命令来操作Active Directory(AD),如Set-ADUser和Get-ADUser。
获取当前日期并创建输出文件路径:
powershell$date = (Get-Date).ToString("yyyyMMdd") $Output_file1 = "C:\SCRIPTS\mail_arbitration\USER_$date.html"
Get-Date获取当前日期,并将其格式化为yyyyMMdd的字符串形式。
创建一个输出文件的路径,通过日期动态生成文件名,以便保存后续生成的HTML文件。
更新Active Directory中的用户信息:
powershellImport-Csv -Path C:\SCRIPTS\mail_arbitration.csv | foreach {set-ADUser -Identity $_.samaccountname -Manager $_.Manager}
使用Import-Csv从指定的CSV文件中读取数据,每一行被转换为对象。
foreach循环遍历每个对象,并通过Set-ADUser命令更新用户的经理信息。
$_表示当前处理的对象,通过$_.samaccountname访问当前行的SamAccountName字段,$_.Manager访问当前行的Manager字段。
暂停执行:
powershellStart-Sleep 2
让脚本暂停2秒,以等待AD更新操作的完成。
获取用户状态并生成报告:
powershell$newstatus = Import-Csv -Path C:\SCRIPTS\mail_arbitration.csv | foreach {Get-ADUser -Identity $_.samaccountname -Properties samaccountname,name,Manager,mail | Select-Object ` samaccountname,name,mail,` @{Label="manager";Expression={($_.manager | Get-ADUser | select -ExpandProperty name) -join ","}}}
再次通过Import-Csv从CSV文件中读取用户数据,获取每个用户的当前状态。
使用Get-ADUser获取每个用户的samaccountname、name、Manager、mail属性。
Select-Object选择需要的属性,并创建一个计算属性manager,该属性展示其经理的名字。通过-join ","将多个经理名字合并为字符串。
生成HTML文件:
powershell$newstatus | ConvertTo-Html -Title "邮件仲裁指定主管账号" -Body "<H3>邮件仲裁指定主管账号</H3>" | ForEach {$_ -replace "<tr>","<tr bgcolor=silver>"} > $Output_file1
将获取的用户状态通过ConvertTo-Html转换为HTML格式,设置网页标题和主体内容。
使用ForEach循环对HTML表格的每一行应用替换,使列表中的每行都有背景色为银色。
最终将生成的HTML内容输出到之前定义的输出文件中。
发送电子邮件:
powershell# 邮件收件人列表 $user1 = "1111.Kang@bbbb-ict.com" $user2 = "2222.Ye@bbbb-ict.com" $user3 = "3333.Zhuang@bbbb-ict.com" $user4 = "4444.Chen@bbbb-ict.com" $user5 = "5555.mmmmm@luxshare-ict.com" # SMTP服务器信息 $smtpServer = "192.168.21.20" $smtp = New-Object Net.Mail.SmtpClient($smtpServer) $smtpUser = "System.Script" $smtpPassword = "cccccccc()" # 输入SMTP凭据 $smtp.Credentials = New-object System.Net.networkCredential($smtpUser,$smtpPassword) # 创建邮件对象 $msg = New-Object Net.Mail.MailMessage $msg.To.Add($user1) $msg.To.Add($user2) $msg.To.Add($user3) $msg.To.Add($user4) $msg.From = "System.Script@bbbb-ict.com" $msg.Subject = "邮件仲裁指定主管账号_$date" $msg.IsBodyHTML = $true $msg.Body = get-content $Output_file1 $smtp.Send($msg)
指定收件人邮箱地址,确保包含所有需要通知的人。
设置SMTP服务器地址,并创建一个SmtpClient对象。
输入SMTP凭据(用户名和密码),以便发送邮件。
创建邮件对象,设置发件人、主题和正文内容(从之前生成的HTML文件中读取)。
通过 SMTP 服务器发送邮件。
重置邮件正文:
powershell$body = ""
这一行将 $body 变量重置为空,可视为清理变量,以避免信息被覆盖或泄露。
整段PowerShell脚本的逻辑流程如下:
导入Active Directory模块。
读取CSV文件,更新每个用户的经理信息。
生成一个包含所有用户当前状态的HTML报告。
通过SMTP服务器将生成的报告以电子邮件的形式发送给多个指定邮箱收件人。
这个脚本是一个典型的示例,展示了如何通过PowerShell自动化管理Active Directory中的用户信息,以及如何通过电子邮件发送报告。这可以大大提高工作效率,减少人工操作的出错率。如果你需要更深入的内容或对某部分有疑问,请告诉我!