代码改变世界

分享一段PowerShell用户认证Function

2012-06-09 22:29  破狼  阅读(2132)  评论(1编辑  收藏  举报

      在最近工作中遇到对用户验证,需要根据用户名和密码验证用户是否合法。在外文网站找到的这段代码,在这里分享给大家,如果你也需要用户验证的话,那么可以直接copy使用,现在没地方用,也可以收藏备用,LY6DR3ISJE0)6K)L)]~VIZK 

 1 Function Test-UserCredential {
 2 
 3      [CmdletBinding()] [OutputType([System.Boolean])]
 4 
 5      param(
 6 
 7          [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]
 8 
 9          [System.String] $Username,
10 
11 
12 
13 
14          [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]
15 
16          [System.String] $Password,
17 
18         
19 
20          [Parameter()]
21 
22          [Switch$Domain
23 
24      )
25 
26     
27 
28      Begin {
29 
30          $assembly = [system.reflection.assembly]::LoadWithPartialName('System.DirectoryServices.AccountManagement')
31 
32      }
33 
34     
35 
36      Process {
37 
38          try {
39 
40              $system = Get-WmiObject -Class Win32_ComputerSystem
41 
42              if ($Domain) {
43 
44                  if (0, 2 -contains $system.DomainRole) {
45 
46                      throw 'This computer is not a member of a domain.'
47 
48                  } else {
49 
50                      $principalContext = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext 'Domain', $system.Domain
51 
52                  }
53 
54              } else {
55 
56                  $principalContext = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext 'Machine', $env:COMPUTERNAME
57 
58              }
59 
60             
61 
62              return $principalContext.ValidateCredentials($Username$Password)
63 
64          }
65 
66          catch {
67 
68              throw 'Failed to test user credentials. The error was: "{0}".' -f $_
69 
70          }
71 
72      }
73 
74 }

      

使用很简单方便:Test-UserCredential  “用户名” “密码” “用户域”,第三个参数“用户域”为可选参数,返回为布尔类型。