我正在尝试编写执行以下操作的Powershell脚本:
我不在乎是否发送一封包含所有有效文件的电子邮件,或者是否为每个有效文件发送一封电子邮件。
以下代码是我所拥有的,但是尝试附加文件时出错,提示Send-MailMessage:找不到驱动器。名称为“
的驱动器$ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
Select-String -Pattern "Test" |
Select-Object -Unique Path
foreach ($ValidFile in $ValidFiles)
{
$From = 'test <[email protected]>'
$To = 'me <[email protected]>'
$Subject = "Valid File Found"
$Username = "Test-Domain\test"
$Password = ConvertTo-SecureString "notrealpassword" -AsPlainText -Force
$Creds = New-Object System.Management.Automation.PSCredential($username, $password)
$Body = "Please review the attached files"
$Attachment = $ValidFile | Out-String
$SMTPServer = "test-com.mail.protection.outlook.com"
Send-MailMessage -From $From -To $To -Subject $Subject -Credential ($Creds) -Attachments $Attachment -UseSsl -Body $Body -DeliveryNotificationOption OnSuccess, OnFailure -SmtpServer $SMTPServer
}
非常感谢您的帮助。
$ValidFiles
仅包含字符串(文件路径):
$ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
Select-String -List -Pattern "Test" |
ForEach-Object Path
-List
添加到Select-String
使搜索在给定文件中找到的first
Select-String
的需要。即使仅指定了[[one属性Select-Object -Unique
,Select-Object
也会输出具有指定属性的Select-Object
实例;虽然您可以使用[pscustomobject]
来仅获取Path
属性value
-ExpandProperty Path
和属性名称来代替更为简单。然后,使用.Path
-现在是路径string-直接
作为ForEach-Object
参数。通常,除非您想要输入对象的ForEach-Object
。”>