使用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的表达式调用方法。”
显示的路径正确无误,文件在那里并且它们具有内容。
感谢您的帮助!
答案 0 :(得分:0)
您的文件路径中似乎包含空格。如果在定义"$log"
时将$attachment
放在引号中会发生什么?
更好的解决方案::为避免从文本文件中解析字符串而引起的麻烦,请不要将文件列表输出为文本。只需使用文件系统对象即可。
$logfiles = Get-ChildItem $pfad -Filter *Error*.txt -Recurse | Select-String "Error occured" -List | Select Path
(未经测试,请检查命令是否返回您要查找的文件)