gpt4 book ai didi

email - 发送包含由对象组成的主体的电子邮件

转载 作者:行者123 更新时间:2023-12-03 00:00:33 24 4
gpt4 key购买 nike

我试图编写一个脚本来搜索AD,查找任何过时的计算机,然后向我发送电子邮件。但是,有3个要求:

  • 获取任何超过90天的PC的laSTLogondate
  • 一旦获得该列表,就执行ping测试
  • 从ping测试中获取
  • ,我接受并获取了上次设置密码的时间

  • Import-Module activedirectory
    #Date = today's date -90 days
    $date=[datetime]::Today.adddays(-90)
    $pcArray = @()
    $bodyArray=@()
    $passArray=@()
    $oldpc = Get-ADComputer -properties * -Filter 'lastlogondate -le $date' |
    where {$_.name -like '*WD*'} |select name, lastlogondate

    foreach ($pc in $oldpc)
    {
    if (!(Test-Connection $pc.name -quiet))
    {
    $script:pcArray += $pc.name
    }
    }
    foreach ($failping in $pcArray)
    {
    $lastpass = Get-ADComputer $failping -properties * |
    select name, passwordlastset
    $script:passArray += $lastpass
    }

    #Send email
    foreach ($badpc in $oldpc)
    {
    $script:bodyArray += $badpc
    }
    if($bodyArray)
    {
    Send-MailMessage -to "toEmailaddress "-Subject "Stale Computers Check" -From "fromEmailaddress "-SmtpServer "smtpserver" -BodyAsHtml "The following computers have not been logged into for over 90 days </br>$bodyArray </br></br>
    The following computers are not pingable</br>$pcArray </br></br>The last password changed on those pcs are </br>$lastpass"
    }

    我收到的电子邮件如下所示:
    The following computers have not been logged into for over 90 days 


    The following computers are not pingable
    pcname1 pcname2

    The last password changed on those pcs are
    @{name=pcname1; passwordlastset=12/08/2014 14:59:38}

    如您所见,运行脚本后,尚未发送 $bodyArray变量,在PowerShell中,我调用 $bodyArray,并得到以下输出:
    name       lastlogondate
    ---- -------------
    pcname1 9/13/2014 8:06:21 PM
    pcname2 9/17/2014 5:25:25 PM
    pcname3 12/5/2014 11:16:16 AM
    pcname4 12/8/2014 3:00:01 PM

    我已经尝试过 ToString()并进行迭代,如您在上面看到的。

    至于2号,我想让PC名称在换行符上。我尝试了join + `n,但是没有用。

    对于数字3,我只能输出1台PC,而不能输出整个阵列。通过 pscmd运行,我也有1台PC,但是应该有2台PC,因为我要在 $pcArray中循环2台PC。

    最佳答案

    另外,如果您希望它看起来更美观,更易读,则可以执行以下操作将其吐到表中:

    $body += "<body><table width=""560"" border=""1""><tr>"
    $bodyArray[0] | ForEach-Object {
    foreach ($property in $_.PSObject.Properties){$body += "<td>$($property.name)</td>"}
    }
    $body += "</tr><tr>"
    $bodyArray | ForEach-Object {
    foreach ($property in $_.PSObject.Properties){$body += "<td>$($property.value)</td>"}
    $body += "</tr><tr>"
    }
    $body += "</tr></table></body>"
    $bodyArray[0] | ForEach-Object将列名作为表标题打印出来。然后 $bodyArray | ForEach-Object将所有值打印到表中。如果您想花哨的话,甚至可以添加一些CSS以使表格看起来更好

    关于email - 发送包含由对象组成的主体的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850984/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com