11

PSCrendentialを使用して作成した PowerShell にオブジェクトがあるとしGet-Credentialます。

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

[編集、2 年後]今後の読者のために、 Test-CredentialorTest-PSCredentialの方が適切な名前であることに注意してくださいValidateGet-Verb

4

2 に答える 2

9

私は使用System.DirectoryServices.AccountManagementする方が醜くない方法だと思います:

これはADSIを使用しています(もっと醜いですか?):

$cred = Get-Credential #Read credentials
$username = $cred.username
$password = $cred.GetNetworkCredential().password

# Get current domain using logged-on user's credentials
$CurrentDomain = "LDAP://" + ([ADSI]"").distinguishedName
$domain = New-Object System.DirectoryServices.DirectoryEntry($CurrentDomain,$UserName,$Password)

if ($domain.name -eq $null)
{
 write-host "Authentication failed - please verify your username and password."
 exit #terminate the script.
}
else
{
 write-host "Successfully authenticated with domain $domain.name"
}
于 2012-05-29T16:33:00.490 に答える