我从所有 $Users 获取信息到邮件时遇到问题,只能从 1 台机器获取信息

Posted

技术标签:

【中文标题】我从所有 $Users 获取信息到邮件时遇到问题,只能从 1 台机器获取信息【英文标题】:I have problem getting info from all $Users to mail only get info from 1 machine 【发布时间】:2022-01-19 11:52:26 【问题描述】:

我的问题是我在控制台中获得了显示所有机器“名称”、LastLogonDate 描述的列表。但是当我运行完整脚本时,只有 1 台机器信息通过邮件发送。我错过了什么?抱歉,我对 PS 有点陌生。

##Contains my list of computers that I need data from
$Users = 'PCName1', 'PCName2', 'PCName3'
##Gets AdComputer info
$Computers = Get-ADComputer -Filter * -Properties LastLogOnDate, Description

$Users | foreach 

    $User = $_
    $selectedMachine = $Computers | where Name -eq $User
    if ($selectedMachine) 
        $selectedMachine | select Name, LastLogOnDate, Description
    
    # if it does not exist...


[string[]]$recipients = mymail@asds.com
$fromEmail = from@email.com
$server = "IP"
[string]$emailBody = "$Computer" + "Mail Rapport sendt fra task scheduler $computer $time "
send-mailmessage -from $fromEmail -to $recipients -subject "Machines INFO " -body $emailBody -priority High -smtpServer $server

【问题讨论】:

欢迎来到 ***!你好像忘了问一个问题。请update your post 详细说明代码应该做什么、它当前在做什么以及您需要什么帮助。 【参考方案1】:

您没有在任何地方捕获 ForEach-Object 循环的输出,因此该信息仅出现在控制台上。 此外,我看不到变量$Computer(单数)和$time来自哪里..

另外,我可能有兴趣让您使用Splatting 来使用带有大量参数(如 Send-MailMessage)的 cmdlet。

试试

# Contains my list of computers that I need data from
$Computers = 'PCName1', 'PCName2', 'PCName3'

# loop through the list of computers and capture the output objects in variable $result
$result = foreach ($computer in $Computers) 
    $pc = Get-ADComputer -Filter "Name -eq '$computer'" -Properties LastLogOnDate, Description
    if ($pc) 
        # output the object with the properties you need
        $pc | Select-Object Name, LastLogOnDate, Description
    
    else 
        Write-Warning "Computer '$computer' not found.."
    


# test if we have something to email about
if (@($result).Count) 
    # join the resulting object array (in this demo as simple Table)
    $body = "Mail Rapport sendt fra task scheduler`r`n0"-f ($result | Format-Table -AutoSize | Out-String)

    # use splatting
    $mailProps = @
        To         = 'mymail@asds.com'
        From       = 'from@email.com'
        Subject    = 'Machines INFO'
        Body       = $body
        Priority   = 'High'
        SmtpServer = 'mailserver@yourdomain.com'
        # other parameters can go here
    
    # send the email
    Send-MailMessage @mailProps

【讨论】:

谢谢西奥,这成功了!

以上是关于我从所有 $Users 获取信息到邮件时遇到问题,只能从 1 台机器获取信息的主要内容,如果未能解决你的问题,请参考以下文章

运行带有cronjob的结果需要时间的页面[关闭]

路线变化的奇怪行为

获取已发送邮件的id

Linq Group by 并获取返回所有列的特定字符串规则的所有值

使用 Google Script 永久删除我的电子邮件的脚本

如何从firebase中的电子邮件中获取用户信息