2012-10-31 11 views
6

Pracuję nad skryptem PowerShell dla działu pomocy technicznej, który będzie używany podczas migracji folderów katalogu użytkownika z serwera do urządzenia NAS. Użytkownik pomocy technicznej wprowadza nazwy użytkownika do pliku "userhomelist.txt".E-mail z wieloma załącznikami

Mój problem polega na tym, że nie mogę pobrać skryptu do załączania wszystkich plików dziennika. Tylko ostatni plik dziennika jest dołączony do wiadomości e-mail. Myślę, że muszę użyć ciągu znaków dla wielu załączników, ale myślę, że istnieje inny sposób.

#----- 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) 
+0

jesteś w PowerShell w wersji 1? –

+0

v2 na pulpicie 64-bitowym Win7. – rainhailrob

Odpowiedz

10

Proponuję użyć send-mailmessage komandletu jeśli jesteś w PowerShell v2 czy v3. Ma parametr -attachments, który akceptuje tablicę ciągu (string[]).

Możesz zmienić swoją zmienną $file, deklarując ją jako $file = @() przed pętlą użytkownika foreach. Wewnątrz foreach zrobić:

$file += "c:\temp\userhome\userhome-move-$username.log" 

zmiana $msgreport jak [string] typ

a następnie za pomocą send-mailmessage komandletu zrobić:

send-mailmessage -SmtpServer "emailserver.business.com" ` 
-From "[email protected]" -to "[email protected]" ` 
-Subject "User migrations" -BodyAsHtml -Body $msgreport -Attachments $file 
+0

Przepraszam, ale jak mogę "zmienić $ msgreport jako typ [ciąg]"? – rainhailrob

+0

@rainhailrob po prostu pomijając '$ msgreport = new-object Net.Mail.MailMessage' i używając' $ msgreport + = ..text tutaj ... 'po pierwszym' $ msgreport = "Aby wyświetlić pliki dziennika, .... '. Możesz i niektóre' n'r na końcu linii formatowania powrotu karetki ... –

+0

Tak więc ten e-mail każdego dziennika osobno lub jeden e-mail ze wszystkimi dziennikami? – rainhailrob

Powiązane problemy