Powershell校验AD用户密码有效性
AD(Active Directory)由微软公司开发的一种目录服务,提供了一种集中式存储和管理用户、计算机、打印机、文件共享等网络资源的方法。
主要提供一些关键特点和功能:
1.用户和计算机管理:AD允许管理员创建、管理和删除用户帐户以及计算机帐户。这包括设置密码策略、分配权限和控制访问等。
2.组织单元(OU)和域:AD使用组织单元来组织和管理网络资源。多个组织单元可以形成一个域(Domain),并且域之间可以建立信任关系。
3.身份验证和访问控制:AD支持身份验证和授权机制,确保只有经过授权的用户能够访问特定的资源。
4.分布式架构:AD支持分布式部署,可以在不同地理位置的多个服务器上进行复制,提高性能和可用性。
5.统一登录:通过AD,用户可以使用统一的凭据登录到企业内的各个资源,如电子邮件、文件共享、应用程序等。
6.策略管理:AD允许管理员定义和应用各种策略,例如密码策略、安全策略和组策略,以确保网络安全和合规性。
闲话少说,步入正题,当验证某个服务账户密码是否有效时,常规做法是将账户名添加到服务器或设备上,并通过远程登录或通过WEB服务进行校验。今天我们将使用PowerShell脚本进行验证,当然也可以使用其他开发程序实现相同的校验。
#code为:bom + utf8
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
$usernamef = Get-Credential
$username1 = $usernamef.username
$domain1 = 'byssoft.com' ##定义域名
$username2 = $username1 + '@' + $domain1
Import-Module Activedirectory
$user = Get-ADUser -filter { Enabled -eq $True -and PasswordNeverExpires -eq $False -and UserPrincipalName -eq $username2 } -Properties *
if ( ($user -eq $null) -or ($user -eq '') )
{
$Error_1 = " IDCode: $username1 `n Passwd: $pwd `n`n Result: Error Not User."
[System.Windows.Forms.MessageBox]::Show($Error_1)
Write-Error $Error_1
exit 1
}
$pwd = $usernamef.GetNetworkCredential().password
$maxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
$PasswdExpDate = $user.PasswordLastSet.AddDays($maxPasswordAge)
""
$DomainObj = $DomainObj = "LDAP://" + $domain1
$DomainBind = New-Object System.DirectoryServices.DirectoryEntry($DomainObj,$username1,$pwd)
$DomainBind.distinguishedName
if ($DomainBind.distinguishedName -match $domain1.Split('.')[0])
{
$SuccInfo = " IDCode: $username1 `n Passwd: $pwd `n PasswdExpDate:$PasswdExpDate `n`n Result: IDCode & Passwd is OK"
Write-Host -ForegroundColor green $SuccInfo
[System.Windows.Forms.MessageBox]::Show($SuccInfo)
exit 0
}
else
{
$Error_2 = " IDCode: $username1 `n Passwd: $pwd `n`n Result: IDCode is OK,The Passwd is Wrong"
Write-Error $Error_2
[System.Windows.Forms.MessageBox]::Show($Error_2)
exit 2
}
如果密码正确返回OK;
如果输入一个错误的密码,返回验证失败