Powershell-组合循环结果

Powershell-组合循环结果,powershell,Powershell,我之前发布了这个脚本,并得到了一些帮助,但后来删除了它以避免混淆。我有一个例外,它几乎可以工作。发送给每位经理的电子邮件内容仅包括阵列中最后一位直接下属的数据。我需要重新构造脚本吗?如果我有一条尾巴的话,我觉得我在追我的尾巴:) 编辑:我添加了建议的更改,但现在我得到: 电子邮件1:经理和直接下属 电子邮件2:电子邮件1和下一任经理及直接下属的内容 电子邮件3:电子邮件1和2的内容,下一任经理和直接下属 解决方法:感谢技术人员。修改+=并将$body移动到循环中的正确位置是关键 我的脚本更新

我之前发布了这个脚本,并得到了一些帮助,但后来删除了它以避免混淆。我有一个例外,它几乎可以工作。发送给每位经理的电子邮件内容仅包括阵列中最后一位直接下属的数据。我需要重新构造脚本吗?如果我有一条尾巴的话,我觉得我在追我的尾巴:)

编辑:我添加了建议的更改,但现在我得到:

  • 电子邮件1:经理和直接下属
  • 电子邮件2:电子邮件1和下一任经理及直接下属的内容
  • 电子邮件3:电子邮件1和2的内容,下一任经理和直接下属
解决方法:感谢技术人员。修改+=并将$body移动到循环中的正确位置是关键

我的脚本更新脚本:

Import-Module -Name ActiveDirectory

$today = (Get-Date).ToString()

# Html
$a = "<style>"
$a = $a + "BODY{background-color:Lavender ;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 5px;border-style: solid;border-color: black;background-color:thistle}"
$a = $a + "TD{border-width: 1px;padding: 5px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"
$a = $a + "</style>"


# Email Variables
$smtp = "192.168.1.1"
$to = "User@Company.com"
$from = "User@company.com"
$subject = "Managers - Direct Report's Group Membership"

$managers = Get-ADUser -Filter * -Properties name, directreports, EmailAddress | where {$_.directreports -ne $Null}

foreach ($i in $managers) 
{
    $mgrname = $i.Name
    $mgremail = $i.EmailAddress
    $dreports = $i.directreports
    $body = "Report Date $today ."
    $body = "`n"
    $body = "<H3>The direct reports for $mgrname<H3>"
    foreach ($d in $dreports)
    {
        $user = get-aduser $d -properties *
        $mems = $user.memberof -replace '^CN=(.+?),(?:OU|CN)=.+','$1' | %{New-Object PSObject -Property @{'Group Membership'=$_}} | convertTo-html -Head $a -Body "<H2>Group Membership.</H2>"
        $dreport = $d -replace '^CN=(.+?),(?:OU|CN)=.+','$1'

        $body += "`n"
        $body += "<H3>Direct Report: $dreport</H3>"
        $body += "`n"
        $body += $mems
        $body += "`n"

     }
      Send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject -Body $body -BodyAsHtml  
}
导入模块-名称ActiveDirectory
$today=(获取日期).ToString()
#Html
$a=“”
$a=$a+“主体{背景色:淡紫色;}”
$a=$a+“表{边框宽度:1px;边框样式:实心;边框颜色:黑色;边框折叠:折叠;}”
$a=$a+“TH{边框宽度:1px;填充:5px;边框样式:纯色;边框颜色:黑色;背景颜色:蓟叶}”
$a=$a+“TD{边框宽度:1px;填充:5px;边框样式:纯色;边框颜色:黑色;背景颜色:淡黄色}”
$a=$a+“”
#电子邮件变量
$smtp=“192.168.1.1”
$to=”User@Company.com"
$from=”User@company.com"
$subject=“经理-直接下属的集团成员资格”
$managers=Get ADUser-Filter*-Properties name,directreports,EmailAddress |其中{$\ directreports-ne$Null}
foreach($i单位为$managers)
{
$mgrname=$i.Name
$mgremail=$i.EmailAddress
$dreports=$i.directreports
$body=“报告日期$today。”
$body=“`n”
$body=“$mgrname的直接下属”
foreach($d单位为$d报告)
{
$user=get aduser$d-属性*
$mems=$user.memberof-replace'^CN=(.+),(?:OU | CN)=.+','$1'|%{New Object PSObject-Property@{'Group Membership'=$}}}转换为html-Head$a-Body“Group Membership”
$dreport=$d-替换“^CN=(.+),(?:OU | CN)=.+”,“$1”
$body+=“`n”
$body+=“直接报告:$dreport”
$body+=“`n”
$body+=$mems
$body+=“`n”
}
发送邮件-SmtpServer$smtp-到$To-从$From-主题$Subject-正文$Body-BodyAsHtml
}

假设您希望将所有报告作为单独的电子邮件发送给所有经理,请将
发送邮件
调用移动到报告
foreach
循环内


或者,如果您想向每位经理发送一封包含所有报告的电子邮件,请在您的报告循环外部声明
$body
,并将循环中的第一次分配更改为“$body+=”report Date$today。”

foreach的每次迭代($d in$dreports)重置
$body
。换线

$body = "Report Date $today ."

这一行:

$body=“报告日期$today。”

正在为每个直接报告重置$body变量。所以,当你开始发送邮件时,你所拥有的只是最后一个直接下属


尝试将该行移到foreach循环的上方,该循环在direct reports中进行迭代。

好的,解决此问题的方法是将大部分电子邮件生成移到foreach($d in$dreports)循环之外。标题部分($Body='Report for$today',以及下面两行)被上移,实际发送邮件的行被下移到循环之外。更新的代码已经在OP中了,我想,所以我不会再麻烦重新发布了。

我不是已经回答了吗?部分-我做了以下操作:我更改了$body+=“Report Data$today”,并将以下两行移到foreach($dreports中的d)循环上方。问题是,当我运行脚本时,电子邮件会使数据达到顶点。第一封邮件可以,但第二封邮件包含第一封邮件的数据和下一位经理的直接下属,第三封邮件包含第一封和第二封以及第三位经理的直接下属。将其更改回$body=只要它在该循环之外,它就应该可以正常工作,然后是MadTechnician-宾果!谢谢你能在主线程中发表评论,这样我就可以给你信用了,因为你先帮了我?他删除了最后一个问题,而我的答案只更新了一半,这让他有点失望。是的,这正是问题所在。
$Body=“报告日期:$today”
行需要移到
ForEach($dreports中的d)
行上方。实际上,
$Body=
后面的两行也需要上移。这个答案应该可以解决这个问题,已经+1了。TheMadTechnician-很抱歉,我不得不删除以前的帖子。我正试图通过留言与你联系,向你道歉。我尝试了你的建议,它包含在这个脚本中。我会接受你和其他人的建议。再次对可能的冒犯表示抱歉。谢谢大家的意见!我一整天都在开会,所以我要到第二天早上才能开始:(首先感谢广告技术员的帮助。同时也感谢其他人的投入。
$body += "Report Date $today ."