secuencia de comandos de PowerShell

secuencia de comandos de PowerShell

Estoy intentando escribir un script de PowerShell que envíe por correo electrónico, como archivos adjuntos, todos los archivos de cada subcarpeta de C:\Reports\ juntos en un correo electrónico. Por ejemplo, si las subcarpetas son C:\Reports\ABC que tienen a.txt, b.xml y c.jpg y C:\Reports\DEF que tienen d.txt, e.xml y f.pdf, el código debe enviarse por correo electrónico a un .txt, b.xml y c.jpg en un correo electrónico y d.txt, e.xml y f.pdf en otro. Escribí el siguiente código: -

$Directory=Get-ChildItem "C:\Reports\" -Directory 
$Cred = Get-Credential 
Foreach($d in $Directory) { 
Write-Host "Working on directory $($d.FullName)..." 
$files=Get-ChildItem -Path "$($d.FullName)"
cd $d.Fullname  
Send-MailMessage -From "[email protected]" -To "[email protected]" -Subject "test" -SmtpServer "smtp.gmail.com" -Port "587" -Attachments $files -BodyAsHtml "test msg" -Credential $Cred -UseSsl
} 

Sin embargo, esto parece adjuntar solo el último archivo de cada subcarpeta y luego pasar a la siguiente carpeta y correo electrónico. Me pregunto cómo se puede usar correctamente Get-ChildItem - File con Send-MailMessage - Adjuntos para lograr lo que estoy tratando de hacer.

Respuesta1

Aquí hay un código (no probado):

#Connection Details
$username="john"
$password="password"
$smtpServer = "mail.server.local"
$msg = new-object Net.Mail.MailMessage

#Change port number for SSL to 587
$smtp = New-Object Net.Mail.SmtpClient($SmtpServer, 25) 

#Uncomment Next line for SSL  
#$smtp.EnableSsl = $true

$smtp.Credentials = New-Object System.Net.NetworkCredential( $username, $password )

#From Address
$msg.From = "[email protected]"
#To Address, Copy the below line for multiple recipients
$msg.To.Add("[email protected]")

#Message Body
$msg.Body="Please See Attached Files"

#Message Subject
$msg.Subject = "Email with Multiple Attachments"

#your file location
$files=Get-ChildItem "C:\Reports\"

Foreach($file in $files)
{
Write-Host "Attaching File :- " $file
$attachment = new-object Net.Mail.Attachment -ArgumentList $file.FullName
$msg.Attachments.Add($attachment)
}

$smtp.Send($msg)
$attachment.Dispose();
$msg.Dispose();

fuente

información relacionada