比方说,我使用Get-Credential
在PowerShell中创建了一个PSCrendential
对象。验证PowerShell PSCredential
如何根据Active Directory验证输入?
现在我发现这种方式,但我觉得这是一个有点难看:
[void][System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement")
function Validate-Credentials([System.Management.Automation.PSCredential]$credentials)
{
$pctx = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Domain, "domain")
$nc = $credentials.GetNetworkCredential()
return $pctx.ValidateCredentials($nc.UserName, $nc.Password)
}
$credentials = Get-Credential
Validate-Credentials $credentials
[编辑,两年后]对于未来的读者,请注意Test-Credential
或Test-PSCredential
更好的名字,因为Validate
不是有效的PowerShell动词(见Get-Verb
)
据我所知,PSCredentials是身份验证提供程序不可知论(它基本上是一个简单的用户名/密码容器),但这个要求听起来很常见。 –
@SteveB对于系统管理员和开发人员来说,这是一个非常常见的任务,尤其是那些在AD工作的人员,这就是为什么(IMO)微软需要AccountManagement。在这里你可以看到在c#中使用多种方式来完成这个任务:http://stackoverflow.com/questions/290548/c-sharp-validate-a-username-and-password-against-active-directory –
事实上,一般开发最佳实践适用于此。特别是我可以隐藏在这个功能的复杂性,然后简单地调用函数:) –