【发布时间】:2019-04-29 09:12:04
【问题描述】:
使用 powershell 我想扫描一个包含多个 txt 文件(备份日志文件)的文件夹,并在出现错误时创建一封电子邮件,其中包含包含附加到邮件的错误消息的特定 txt 文件。
目前我识别日志文件并将它们的路径写入单独的 txt 文件。
Get-ChildItem $pfad -Filter *Error*.txt -Recurse | Select-String "Error occured" | Select-Object -expandproperty Path | Out-File -FilePath $filelist
我得到一个包含这个的 txt 文件(没有标题,没有空行):
D:\Share\test2\Neues TextdokumentError.txt
D:\Share\test2\Testfile fbibgfwErroriebgfvibfvsbvf full.txt
然后我想创建一封电子邮件并附加来自该单独 txt 文件的文件。
$logfiles = Get-Content $filelist
ForEach($log in $logfiles)
{
Write-Host “Attaching File :- ” $log
$attachment = New-Object System.Net.Mail.Attachment –ArgumentList $log
$msg.Attachments.Add($attachment)
}
这是我不断得到的结果:
Attaching File :- D:\Share\test2\Neues TextdokumentError.txt
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\test\Unbenannt1.ps1:43 Zeichen:3
+ $msg.Attachments.Add($attachment)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Attaching File :- D:\Share\test2\Testfile fbibgfwErroriebgfvibfvsbvf full.txt
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\test\Unbenannt1.ps1:43 Zeichen:3
+ $msg.Attachments.Add($attachment)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
在英语中,错误的意思是:“不可能为具有 NULL 的表达式调用方法。”
显示的路径是正确的,文件在那里并且有内容。
感谢您的帮助!
【问题讨论】:
-
我不熟悉 System.Net.Mail.Attachment。我个人在 PowerShell 中使用 Send-MailMessage cmdlet。但在我看来,$msg 没有被声明。你在代码的什么地方声明了 $msg?
-
这条线是否有效>>>
New-Object System.Net.Mail.Attachment –ArgumentList $log -
@BernardMoeskops 我在定义邮件设置的部分将变量从 $msg 更改为 $mailmessage 并忽略了附件循环中的旧变量.... 1.5 小时直到我放弃.当我纠正它时,它立即起作用。谢谢你! :)
标签: powershell