【问题标题】:Assignment operator prevents concatenation赋值运算符防止串联
【发布时间】: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


【解决方案1】:
ForEach ($company in $list) {
    $groupName = $company.comp + '16up'
    $myList = ( Get-ADGroup $groupName ).DistinguishedName

看到花招了吗? ;-)

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 2016-04-01
    • 2010-12-17
    • 2018-10-07
    • 1970-01-01
    • 2011-08-02
    • 2019-10-06
    • 2011-11-16
    相关资源
    最近更新 更多