这段脚本的用途是验证最近一天内创建的新员工在AD(Active Directory)中的账号是否能够成功通过验证,以确定他们的用户名和密码是否正确。在具体操作上,脚本会检索包含新员工账号信息的Excel文件中的密码,并使用该密码尝试验证AD用户的凭据是否有效。如果验证成功,则输出成功消息;如果验证失败,则输出警告消息。
该脚本主要目的是加快处理新员工账号请求的速度,并在保证账号信息准确性的前提下提高处理效率和质量。通过该脚本,管理员可快速而准确地确认每个新员工账号的凭据是否有效,并且不需要手动验证每个用户的账号。
以下是全部代码:
# 配置 AD 域控制器的域名或 IP 地址、管理员帐户和密码
$Server = "***********"
$Admin_Username = "***********"
$Admin_Password = ConvertTo-SecureString "***********" -AsPlainText -Force
# 获取昨天的日期
$Yesterday = (Get-Date).AddDays(-1).Date
# 创建的凭证对象
$Credential = New-Object System.Management.Automation.PSCredential ($Admin_Username, $Admin_Password)
# 从环境变量中获取 Excel 文件路径
$pathEnv = "OneDriveCommercial"
if (-not([System.Environment]::GetEnvironmentVariable($pathEnv))) {
Write-Error "$pathEnv 环境变量未定义."
# 如果未定义环境变量,则返回并显示错误消息
return
}
$path = Join-Path ([System.Environment]::GetEnvironmentVariable($pathEnv)) "新员工账号信息.xlsx"
if (-not (Test-Path $path)) {
Write-Error "$path 路径未找到."
# 如果文件不存在,则返回并显示错误消息
return
}
# 创建 Excel 应用程序对象
$excel = New-Object -ComObject "Excel.Application"
# 获取最近一天内创建的启用的所有 AD 用户
$New_AD_Users = Get-ADUser -Filter {(whenCreated -gt $Yesterday) -and (Enabled -eq $true)} -Server $Server -Credential $Credential
# 检查 AD 用户是否为空
if ($New_AD_Users -eq $null) {
Write-Host "There is no new AD user created in the last day." -ForegroundColor Yellow
# 如果 AD 用户为空,则返回并显示警告消息
} else {
# 遍历每个新的 AD 用户
foreach ($New_AD_User in $New_AD_Users) {
# 获取用户的用户名
$username = $New_AD_User.UserPrincipalName
# 查找密码
$password = $null
$workbook = $null
try {
# 打开 Excel 文件
$workbook = $excel.Workbooks.Open($path)
$worksheet = $workbook.Worksheets.Item(1)
# 统计表格使用范围中的行数和列数
$rowCount = $worksheet.UsedRange.Rows.Count
$colCount = $worksheet.UsedRange.Columns.Count
# 使用 for 循环查找所需的信息
for ($i = 2; $i -le $rowCount; $i++) {
$cell = $worksheet.Cells.Item($i, 13)
if ($cell.Value2 -eq $username) {
$password = $worksheet.Cells.Item($i, 14).Value2
# 如果找到密码,则退出循环
break
}
}
# 关闭 Excel 文件
$workbook.Close($false)
} catch {
Write-Warning "在查找 $username 的密码时出现错误:$($_.Exception.Message)"
# 如果在查找密码时发生错误,则显示警告消息
} finally {
$excel.Quit()
# 退出 Excel 应用程序
}
if ($password -ne $null) {
# 从电子邮件地址中提取用户名
$identity = $username.Split('@')[0]
# 创建 PSCredential 对象
$creds = New-Object System.Management.Automation.PSCredential ($username, (ConvertTo-SecureString $password -AsPlainText -Force))
# 尝试验证用户的凭据是否有效
try {
$null = Get-ADUser -Credential $creds -Identity $identity -Server $Server -Properties *
Write-Host "AD用户名 $username 的密码有效。" -ForegroundColor Green
# 如果 AD 用户的凭据有效,则输出成功消息
} catch {
Write-Warning "在测试 AD用户名 $username 时,密码时出现错误:$($_.Exception.Message)"
# 如果尝试验证用户的凭据时出错,则显示警告消息
}
}
}
}
文末冷笑话:
为什么程序员总是喜欢冷笑话?因为只有程序员知道
01001001 00100000 01101100 01101111 01110110 01100101 00100000 01111001 01101111 01110101 的含义。
01001001 00100000 01101100 01101111 01110110 01100101 00100000 01111001 01101111 01110101 的含义是"我爱你"