【发布时间】:2019-03-16 19:32:12
【问题描述】:
好的,所以我对 powershell 有点陌生,我正在尽我所能,但似乎无法做到这一点。
我的目录设置方式是每个组织都有自己的“密码重置组”我将根据事件日志条目“目录服务更改”运行计划任务设置。该脚本的工作是在组中查找成员并将他们的密码重置回他们的员工编号,让用户在下次登录时更改密码,然后将用户从组中删除。我似乎无法正确获取语法。
Try {
$GroupDN = (Get-ADGroup -Filter {Name -like '*Password Reset Group*'}).DistinguishedName
}
Catch {
Write-Host "Unable to locate group: $Group because ""$($Error[0])""" -ForegroundColor Red
Exit
}
ForEach ($User in (Get-ADUser -Filter * -Properties MemberOf,employeeNumber))
{ If ($User.MemberOf -contains $GroupDN)
{ $password = "$($_.employeeNumber)new!" | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $User -NewPassword $password -Reset
Remove-ADGroupMember -Identity "$GroupDN" -Members $User
}
}
【问题讨论】:
-
您的
try-catch块有问题,因为它永远不会抛出错误。如果没有找到任何组,它只会返回$null。要访问每个循环上的employeeNumber 属性,您需要使用$User.employeeNumber。此外,$GroupDN变量可能包含一组 distinctName 属性值,因此您的if语句会有问题。 -
我可能在之前的评论中说错了它“永远不会”引发错误。如果在运行命令时无法联系域控制器或 ldap 服务器,或者 ActiveDirectory 模块加载有问题,则会引发错误。如果这是你的意图,那么你可以忽略我所说的。但是,无法从成功查询到 AD 中找到组不会出错。
-
好的,那么要解决这个问题,我应该如何修改我的脚本?我对 Powershell 非常陌生,我正在努力掌握它。
标签: powershell active-directory directoryservices