gpt4 book ai didi

powershell - 使用管道对象填充邮件收件人和附件

转载 作者:行者123 更新时间:2023-12-02 02:47:17 24 4
gpt4 key购买 nike

有史以来第一个 Powershell 脚本,因此欢迎任何意见或建议。我正在将 .csv 解析为更小的 .csv,以将有关服务器的信息发送给收件人,但我在 foreach 中遇到了问题。我如何让它发挥作用?

一件有趣的事情是,在 Send-MailMessage 中,-to 不应该接受管道对象,它仍然会抛出错误,但它仍然会发送电子邮件。但是附件永远不会发送。

    #had to set this as a variable because @ was throwing splatting errors
$Mail = "@Email.com"

#Import csv and split information, exports UID.csv
Import-csv C:\path\info.csv | Group-Object UID |
ForEach-Object {
$_.Group | Export-csv "C:\path\$($_.Name).csv" -NoTypeInformation
}

#Import file again to get unique list of UID and send mail with
#respective UID.csv

Import-csv C:\path\info.csv | Group-Object UID |
ForEach-Object {
$_.UID | Send-MailMessage -From "<Me@email.com>" -To "<$($_.Name)$Mail>" `
-Attachments "C:\path\$($_.Name).csv" `
-Subject "Testing" -Body "Please Ignore This" -Priority High `
-SmtpServer smtp.server.com
}

最佳答案

in Send-MailMessage, -to should not accept pipeline objects

原则上它确实如此,即如果管道对象具有 .To 属性(您不是这种情况)。

但是,如果您将所有输入都作为参数提供,那么您根本不需要管道输入。

此外,您的管道输入不正确,因为 $_.UID 通过管道发送 $null,假设 $_ - a Group-Object 输出的组信息对象 - 没有 .UID 属性。

使用 delay-bind script blocks ({ ... }),您可以按如下方式简化命令,避免调用 ForEach-Object:

Import-csv C:\path\info.csv | Group-Object UID |
Send-MailMessage -From "<Me@email.com>" -To { "<$($_.Name)@Email.com>" } `
-Attachments { "C:\path\$($_.Name).csv" } `
-Subject "Testing" -Body "Please Ignore This" -Priority High `
-SmtpServer smtp.server.com

简而言之,传递给-ToAttachments 的脚本 block 针对每个输入对象进行评估,它们的输出决定每次迭代中的参数值。在脚本 block 中,$_ 像往常一样代表手边的管道对象。

请注意,此类延迟绑定(bind)脚本 block 只能用于旨在接受管道输入的参数(无论是按值(整个对象)还是按特定属性的值)。

关于powershell - 使用管道对象填充邮件收件人和附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53891049/

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