【发布时间】:2021-02-13 09:50:18
【问题描述】:
好的,先写代码:
import-module activedirectory
. "C:\Users\ben\Documents\Get-Directreport.ps1"
$ou = "ou=test, ou=Litmos, ou=Resources, ou=Groups, ou=company, dc=domain, dc=net"
$creds = "domain.net\ben"
$server = "dc01.domain.net"
$managers = get-adGroupMember -identity "CN=All Managers,OU=Organizational,OU=Groups,OU=company,DC=domain,DC=net" | select name, samaccountname
$name = $managers.name
$ReportsTo = Get-adgroup -searchbase $ou -filter "Name -like 'Report to *'" | where {$_.name -replace 'Report to ' -in $name} | select name, samaccountname
$Reports = $reportsto.name
$underlings = Get-Directreport $name | select samaccountname
Foreach ($manager in $name) {
if ($manager -notin ($reports -replace 'Report to '))
{ new-adgroup -name "Report to $manager" -groupscope global -path $ou }
}
ForEach ($report in $reports) {
#Get-Directreport $name | select samaccountname
{add-adgroupmember -identity $report -members $underlings.samaccountname}
}
因此,该脚本正确地创建了“向 $name 报告”组,并且它正在添加成员,但是它创建的所有 300 个组都具有相同的成员集。我尝试将 $underlings 行放在最后一个循环中,但这导致根本没有成员。我很确定那条线是罪魁祸首,但我想不通。
谢谢!
编辑
首先为我最初遗漏的内容道歉。我想这就是我在一天结束时匆匆忙忙的结果。无论如何,所以这段代码试图创建一系列新的 AD 安全组,即“Report to x”提到的。它通过遍历“All Managers”组的成员来创建这些文件夹,并且 X 变量将是每个 ALL Manager 成员的名称值。
然后我试图用相应的用户填充这些组。这是失败的地方。
Get-Directreport $name | select samaccountname 的行实际上返回了它应该返回的内容。我可以在终端中运行包括 $underlings 在内的整行,它会正确返回。
我同意 Colyn1337 的观点,就是那条线。我不确定如何让它迭代。
【问题讨论】:
-
欢迎来到 StackOverflow。此评论包含重要反馈和您的答案。为了可读性,在下一行继续管道操作。 Long one liner 可能会让你在 syseng 中获得荣誉,但不会在 dev 中获得荣誉。检查飞溅。这两件事都使您的代码更易于阅读。下一件大事是,您的帖子没有明确定义该代码试图实现的目标,从而迫使读者推断它。因此,我无法修复您的代码。话虽如此,您的问题在于“$Underlings”。它没有被迭代,所以它有相同的对象数组。
-
Get-Directreport $name | select samaccountname是否返回您所测试的任何$name值的预期值? -
我根据 Colyns 的评论进行了更改,对此感到抱歉:)。 AdminOfThings,是的!准确返回我正在寻找的内容。
标签: powershell scripting