如何在 Powershell 中使用 Get-ChildItem 将文件附加到电子邮件
How to attach files to email using Get-ChildItem in Powershell
我正在尝试编写执行以下操作的 Powershell 脚本:
- 检查目录中所有文件的有效字符串
- 获取包含该有效字符串的每个文件,然后将它们作为电子邮件附件发送
我不在乎是用一封电子邮件发送所有有效文件,还是为每个有效文件发送一封电子邮件。
以下代码是我的代码,但在尝试附加文件时出错,提示 Send-MailMessage:找不到驱动器。名称为 '
的驱动器
$ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
Select-String -Pattern "Test" |
Select-Object -Unique Path
foreach ($ValidFile in $ValidFiles)
{
$From = 'test <test@test.com>'
$To = 'me <me@test.com>'
$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
}
非常感谢任何帮助。
外字符串阻止 $Attachment 被填充。
$Attachment = $ValidFile | Out-String
尝试
$Attachment = $ValidFile
首先,确保$ValidFiles
只包含字符串(文件路径):
$ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
Select-String -List -Pattern "Test" |
ForEach-Object Path
将 -List
添加到 Select-String
使搜索在给定文件中找到的 第一个 匹配处停止,从而避免了需要Select-Object -Unique
.
Select-Object
outputs [pscustomobject]
instances with the specified property/properties, even if only one property Path
is specified; while you could use -ExpandProperty Path
instead to get just the .Path
property value, it is simpler to use ForEach-Object
改为 属性 名称。
然后,使用 $ValidFile
- 现在是路径 string - direct 作为 -Attachments
参数(这是 [string[]]
类型的,但也接受标量 [string]
实例(单个字符串))。
- 一般来说,不要使用
Out-String
,除非你想要一个格式化以显示输入对象的表示).
我正在尝试编写执行以下操作的 Powershell 脚本:
- 检查目录中所有文件的有效字符串
- 获取包含该有效字符串的每个文件,然后将它们作为电子邮件附件发送
我不在乎是用一封电子邮件发送所有有效文件,还是为每个有效文件发送一封电子邮件。
以下代码是我的代码,但在尝试附加文件时出错,提示 Send-MailMessage:找不到驱动器。名称为 '
的驱动器$ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
Select-String -Pattern "Test" |
Select-Object -Unique Path
foreach ($ValidFile in $ValidFiles)
{
$From = 'test <test@test.com>'
$To = 'me <me@test.com>'
$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
}
非常感谢任何帮助。
外字符串阻止 $Attachment 被填充。
$Attachment = $ValidFile | Out-String
尝试
$Attachment = $ValidFile
首先,确保$ValidFiles
只包含字符串(文件路径):
$ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
Select-String -List -Pattern "Test" |
ForEach-Object Path
将
-List
添加到Select-String
使搜索在给定文件中找到的 第一个 匹配处停止,从而避免了需要Select-Object -Unique
.Select-Object
outputs[pscustomobject]
instances with the specified property/properties, even if only one propertyPath
is specified; while you could use-ExpandProperty Path
instead to get just the.Path
property value, it is simpler to useForEach-Object
改为 属性 名称。
然后,使用 $ValidFile
- 现在是路径 string - direct 作为 -Attachments
参数(这是 [string[]]
类型的,但也接受标量 [string]
实例(单个字符串))。
- 一般来说,不要使用
Out-String
,除非你想要一个格式化以显示输入对象的表示).