【问题标题】:Enabling AD account using powershell使用 powershell 启用 AD 帐户
【发布时间】:2015-03-14 00:48:32
【问题描述】:

在 Active Directory 中创建的所有新用户帐户都保持禁用状态,并勾选“用户下次登录时必须更改密码”选项。此帐户将保持禁用状态 7 天,在第 8 天需要启用它。创建帐户已由另一个脚本完成,我被帐户启用部分卡住了。

如何使用 PowerShell 脚本存档启用这些帐户?如何使用所有帐户属性,例如上次登录日期、帐户创建日期、帐户状态(已禁用)以及“用户下次登录时必须更改密码”选项来验证并找到需要启用的新用户?

get-aduser -f {-not ( lastlogontimestamp -like "*") -and (enabled -eq $false) -and (pwdLastSet -eq 0)} | 
    Select-Object name,SamAccountName | 
    export-csv -path data.csv

【问题讨论】:

  • 你试过什么? Stack Overflow 不是代码编写服务;预计您已经尝试了自己的解决方案,并且需要帮助来解决它。
  • 我尝试过的命令如下所示,但这不能检查用户是否已经过了 7 天的禁用期.. get-aduser -f {-not (lastlogontimestamp -like "*") -and (启用 -eq $false) -and (pwdLastSet -eq 0)} |选择-对象名称,SamAccountName |导出-csv-path data.csv
  • 好的,所以你已经展示了你是如何提取数据的,但是你做了什么 WRT 试图按照你描述的那样使用它?

标签: powershell active-directory


【解决方案1】:

使用过滤器根据您的条件进行过滤。这个 sn-p 获取被禁用帐户的用户对象,然后过滤掉那些不到一周的用户对象。它将它们存储在用户对象的集合中。您可以使用 $variable | $variable where { [filter] } 格式通过任何用户对象属性进一步过滤 $userlist。过滤器可以任意复杂。我喜欢在每一行放一个,这样我就可以轻松地注释掉给定的过滤器。将过滤后的列表用于您想要的任何内容。

$WeekAgoDate = $(Get-Date).addDays(-7)

$userlist = get-aduser -filter { enabled -eq $false } -Properties *
$userlist = $userlist | Where { $_.created -lt $WeekAgoDate }
"$userlist.count accounts found"
$userlist | select name, samaccountname | format-table

启用 $userlist: $用户列表 |启用-ADAccount

【讨论】:

  • Get-ADUser -filter {(enabled -eq $false) -and (pwdLastSet -eq 0) - and -not (lastlogontimestamp -like "*")} -Properties whencreated | Where-Object { $_.whencreated -gt (get-date).adddays(-7) } | select name,SamAccountName,whenCreated | export-csv -path data.csv -NoTypeInformation 上面的命令可以很好地收集用户信息.. 但是如果我需要通过 LDAP 进行通信,我需要如何更改此代码..?我对此完全陌生.. :(
  • 我对 LDAP 没有经验。我知道您可以在使用 Get-ADUser 时使用 -LDAPFilter 而不是 -Filter。您是说您需要针对不同的域运行它吗?您在另一条评论中使用的方法(构建 LDAP 搜索器)是针对 Powershell v1 或 v2 完成的,无需访问 ActiveDirectory Powershell 模块。一般而言,一旦您拉出用户列表,您需要对它做什么?
【解决方案2】:

您可以这样做,但您需要编写脚本:

检查whenCreated 属性它有一个日期时间戳,您可以使用它来查看帐户的年龄。

如果帐户超过 7 天并且帐户被禁用,请将 userAccountControl 属性设置为启用 IE 512,然后将您的用户必须更改密码属性设置为 true

【讨论】:

  • 如果您只是领导 OP,那么这将作为评论更好。
  • 有人能帮我详细说明一下吗.. 正如我之前提到的,我对此完全陌生.. :( $Domain = "dc=XYZ,dc=ABCD,dc=Domain,dc= net" $root = New-Object System.DirectoryServices.DirectoryEntry("LDAP://" + $Domain) $searcher=New-Object System.DirectoryServices.DirectorySearcher($root) $searcher.Filter=”(&(samaccountname= $user))” $results=$searcher.findone()
猜你喜欢
  • 2019-02-08
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多