【发布时间】:2018-04-17 19:46:31
【问题描述】:
我有名为xxx16up, yyy16up, zzz16up 的广告组。我想做的是:
- AD 用户等级为 16 级及以上
- AD 用户还不是该组的成员
脚本会根据公司代码xxx、yyy、zzz将AD用户添加到相应的组中。
$list = Import-CSV "C:\update12Apr2018.csv"
foreach ($company in $list) {
$myList = ( Get-ADGroup "$($company.comp)16up" ).DistinguishedName
if ( ([INT]$_.level -ge 16) -and (Get-ADUser -LDAPFilter "(!(memberof=$myList))" )) {
Add-ADGroupMember -Identity "$($company.comp)16up" -Members $company.samAccountName
}
}
突出显示的部分在代码中不起作用。但是如果我把它拿出来自己运行它就没有问题。它产生xxx16up, yyy16up, or zzz16up.的相应组
在代码中,它给出了以下错误:
Get-ADGroup:在“DC=ACME,DC=com”下找不到标识为“16up”的对象。在行:1 字符:33 + ... ch ($company in $list) { ( Get-ADGroup "$($company.comp)16up" ).Disti ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (16up:ADGroup) [Get-ADGroup], ADIdentityNotFoundException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Manag ement.Commands.GetADGroup
我能够将问题缩小到有赋值操作的时候,也就是它表现得好像连接失败的时候。
【问题讨论】:
-
失败的不是作业。这是对
Get-ADGroup的调用失败,因为它找不到组“16up”。我怀疑您的 csv 文件中有一个错误条目,其中 Comp 属性为空。 -
显然
$company.comp是空的。最可能的原因是您在运行 cmdlet 的环境中无权访问:\update12Apr2018.csv。 -
即使你解决了你的主要问题,代码也不会像你预期的那样工作,因为
$_不存在于foreach中,除了在管道上:([INT]$_.level -ge 16) -
我通过删除分配部分来隔离该连接代码并且它可以工作。我在 CSV 中的所有 $company.comp 都已填充。没有空槽。就像我上面提到的,只有当我将代码放在赋值运算符的右侧时它才会失败。
标签: powershell active-directory concatenation