E-Mail mit mehreren Anhängen
Arbeite ich an ein PowerShell-Skript für den Helpdesk zu verwenden, die bei der Migration der Benutzer-Ordner von einem server auf einem NAS-Gerät. Der help-desk-Benutzer den Benutzernamen in der "userhomelist.txt" Datei.
Mein problem ist, dass ich nicht in der Lage, das Skript zu befestigen alle log-Dateien. Nur die letzten log-Datei an die email angehängt. Ich denke ich muss eine Zeichenfolge für mehrere Anlagen, aber ich denke immer es gibt einen anderen Weg.
#----- STEP #1 retrieve contents of input file ---#
$INPUTFILEPATH = 'c:\temp\userhomelist.txt'
#----- read input file contents ----#
$inputdata = Get-Content $INPUTFILEPATH
#----- Top section of email body ----#
$msgreport = new-object Net.Mail.MailMessage
$msgreport = "To view log files, go to directory where this PowerShell Script was run from. `r"
$msgreport = $msgreport + "`r`n"
#read in each username
foreach ($username in $inputdata)
{
#----- STEP #2 robocopy files from \\server to \\nasdevice location ----#
Start-Process -FilePath robocopy -ArgumentList "\\server\userhomes\$username \\nasdevice\userhomes\$username /mir /sec /r:1 /w:1 /tee /NP /Z /log+:userhome-move-$username.log"
$file = "c:\temp\userhome\userhome-move-$username.log"
$msgreport = $msgreport + "$username robocopy has been completed." + "`n"
##----- STEP #3 change file and directory ownership to user ----#
Start-Process -FilePath subinacl -ArgumentList "/subdirectories \\nasdevice\userhomes\$username\*.* /setowner=$username"
$msgreport = $msgreport + "$username file and directory ownership changes have been completed." + "`n"
$msgreport = $msgreport + "`r`n"
}
#----- Email Results ----#
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpServer = "emailserver.business.com"
$SmtpClient.host = $SmtpServer
$MailMessage.From = "[email protected]"
$MailMessage.To.add("[email protected]")
$MailMessage.Subject = "User migrations"
$MailMessage.IsBodyHtml = 0
$MailMessage.Body = $msgreport
$MailMessage.Attachments.Add($file)
$SmtpClient.Send($MailMessage)
sind Sie in der powershell version 1?
v2 auf Win7 64-bit desktop.
v2 auf Win7 64-bit desktop.
InformationsquelleAutor rainhailrob | 2012-10-31
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schlage ich
send-mailmessage
- cmdlet, wenn Sie in der powershell v2 oder v3.Es hat eine
-attachments
parameter akzeptieren array von string (string[]
).Können Sie Ihre variable
$file
Deklaration als$file = @()
vor derforeach
user-Schleife.Innerhalb der foreach-do:
ändern
$msgreport
als[string]
Typwerden und anschließend über die
send-mailmessage
cmdlet tun:einfach weglassen
$msgreport = new-object Net.Mail.MailMessage
und mit$msgreport += ..text here...
nach dem ersten$msgreport = "To view log files,....
. Sie können und einigen
r am Zeilenende carriage return Formatierung...So würde diese E-Mail jedes Protokoll separat oder eine E-Mail mit allen logs?
eigentlich waren Ihrem code senden Sie eine E-mail mit allen Anhängen... für eine E-mail mit einem Protokoll Sie haben, um
send-mailmessage
in der foreach-Schleife..PS C:\temp> .\powershell-v3-E-Mail-mit-Anhang.ps1 Send-MailMessage : Der angegebene Pfad wird das format nicht unterstützt. Bei C:\temp\Userhome-moves.ps1:33 char:17 + Send-MailMessage <<<< -SmtpServer "emailserver.business.com" -Aus "[email protected]" - "[email protected]" -Thema "User-Migrationen" -BodyAsHtml -Body $msgreport -Anlagen "$file " + CategoryInfo : NotSpecified: (:) [Send-MailMessage], NotSupportedException + FullyQualifiedErrorId : System.NotSupportedException,Microsoft.PowerShell.Befehle.SendMailMessage
InformationsquelleAutor CB.