【发布时间】:2015-03-18 13:45:59
【问题描述】:
我对编写 PS 脚本有点陌生,我通常只需要简单的一两个衬里,但为此我试图循环通过 Active Directory 中的特定 OU 来查找每个用户部门,在前面添加“grp”并将它们添加到该名称的安全组中。例如,一个部门可能类似于 10005,所以我想将它们添加到名为“grp10005”的安全组中。这是我所拥有的,但它不起作用。
Import-Module ActiveDirectory
$users = $i = $null
$strCC
$strGRP = 'grp' & strCC
$users = Get-ADUser -SearchBase "ou=Test,ou=OurUsers,ou=Logins,dc=domain,dc=com" -filter * {department -eq $strCC}
ForEach($user in $users)
{
Add-ADGroupMember 'strGRP' -Members $_.DistinguishedName
-ErrorAction SilentlyContinue
$i++
}
【问题讨论】:
-
您有许多语法错误。
&是调用运算符而不是连接字符串的方法。对于该语句中的strCC缺少它是$,因为PowerShell 正在寻找该名称的关键字。然后您的过滤器使用*指定“全部”,然后有一个脚本块引发错误,因为 PowerShell 试图根据其位置将该脚本块放入另一个参数中。此外,过滤器正在使用 $strCC,但尚未为其分配任何内容,因此它是$null。 -
此外,您在 foreach 中使用了管道变量
$_,但您使用的是ForEach($user in $users)。使用这种形式的 foreach 的全部意义在于使用$user而不是模棱两可的下划线。 -
计数器变量
$i也是不必要的,因为您所做的只是递增计数器,然后从不读取它。 -
@NewGuy 更糟糕的是,
$null++仍然只是$null -
@MathiasR.Jessen 这不是发生的事情。如果
$i不存在,则$i++将其转换为 int。Remove-Variable i -ErrorAction SilentlyContinue; $i -eq $null; $i++; $i -eq $null; $i;返回True、False、1。
标签: powershell active-directory