2017-03-15 2 views
-1

최근 전자 메일 자동화를 위해 PS 스크립트 작업을 시작했습니다. PowerShell에서 데이터를 추출하는 곳 (여러 수신자, 첨부 파일 등)의 CSV 파일이있는 곳에서 함께 관리하십시오. 문제는 일부 셀이 비어 있으면 스크립트가 작동하지 않는다는 것입니다. 이 하나 similar question,하지만 난 그냥 내 경우에 솔루션을 구현하는 방법을 잘 모르겠습니다 :CSV/빈 셀 문제의 PowerShell 여러 전자 메일 수신자 (첨부 파일)

$importFile  = "Users.csv" 

$users = import-csv $importFile | select * 
foreach($user in $users) 
{ 
    $Name   = $user.'Name' 
    $to    = $user.'To' 
    $to2  = $user.'To2' 
    $Attachment = $user.'Attachment' 
    $Attachment2 = $user.'Attachment2'  

    $write = "Emailing account " + $to + " ..." 
    Write-Host $write 

    $body = [string]::join([environment]::newline, (Get-Content -path $emailFile)) 

    $body = $body.Replace('[Name]', $Name) 

    $mail = New-Object System.Net.Mail.MailMessage 
    $mail.From = $emailFrom 
    $mail.To.Add($to) 
    $mail.To.Add($to2) 
    $mail.Subject = $emailSubject 
    $mail.IsBodyHtml = $true 
    $mail.Body = $body 
    $mail.Attachments.Add($Attachment) 
    $mail.Attachments.Add($Attachment2)  

    $smtp = New-Object System.Net.Mail.SmtpClient 
    $smtp.Host = $smtpServerHost 
    $smtp.Port = $smtpServerPort 
    $smtp.EnableSsl = $smtpServerSsl 
    $smtp.UseDefaultCredentials = $false 
    $smtp.Credentials = $credentials 
    $smtp.Send($mail) 

This is how looks CSV file

어떤 제안을 환영합니다 :)

+1

"* StackOverflow에서 볼 수있는 가장 나쁜 카테고리 중 하나는 다음과 같습니다."이 코드를 작성했는데 작동하지 않습니다. (코드 덤프) "* - https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ 어떤 방식으로 작동하지 않습니까? – TessellatingHeckler

+0

System.Net.Mail.MailMessage 사용을 피하십시오 : Powershell은 Send-Mailmessage라는 고유 명령을 사용합니다 (코드 길이를 10-15 줄로 줄여야 함). 의미가 무엇인지 명확히 할 수 있습니까? "스크립트는 작동하지 않습니다"그리고 입력 파일에서 어떤 셀이 비어 있는지 설명하시오 @ – bluuf

+0

@TessellatingHeckler and @bluuf, 입력 해 주셔서 감사합니다. 문제의 이해를 돕기 위해 CSV 파일을 추가했습니다. 나는' Where-Object'를 사용하고 @gvee 답장에 대한 자세한 내용을 제공합니다. 감사합니다. – LordWood

답변

0

로 바로 가기 수 있습니다 : 그것은 가치가 무엇인지에 대한

$users = Import-Csv $importFile | 
Where-Object {$_.Name -ne ""} | 
Select-Object * 

. 예를 들어, ($to2 -ne '')$ to2 셀이 비어 있는지 확인하는 경우입니다. 아니요 인 경우 $mail.To.Add($to2)입니다. $ Attachment에 대한 동일한 상황. 여기에 코드가 있습니다 :

$mail = New-Object System.Net.Mail.MailMessage 
$mail.From = $emailFrom 
$mail.To.Add($to) 
    if ($to2 -ne '') { 
     $mail.To.Add($to2) 
     } 
$mail.Subject = $emailSubject 
$mail.IsBodyHtml = $true 
$mail.Body = $body 
$mail.Attachments.Add($Attachment) 
    if ($Attachment2 -ne '') { 
     $mail.Attachments.Add($Attachment2) 
     } 
+0

왜이 문제가 해결되었는지 설명해 주시겠습니까? –

+0

예를 들어,'$ ($ to2 -ne '')'가 _ $ to2_ cell이 비어 있는지 확인하고 있습니다. 없다면'$ mail.To.Add ($ to2)'; 셀이 비어 있으면 단순히 건너 뜁니다. _ $ Attachment_ – LordWood

+0

에 대한 동일한 상황입니다. 좋습니다. 미래의 사람들이 쉽게 찾을 수 있도록 답변을 업데이트하십시오. :) –

1

행을 필터링 할 수 Where-Object을 시도보다 더 . 전체 "행"비어있는 경우이 단순히 기능은 사건을 해결할 경우 을 구현

... 
Where-Object {$_} | 
... 
+0

'Where-Object'를 설정할 수있었습니다 – LordWood

+0

'$ users = Import-Csv $ importFile | Where-Object {$ _. Name -ne " "- and $ _. To -ne" "및 $ _. 첨부 파일 -ne" "및 $ _. Att achment2 -ne ""} | Select-Object *'- 첫 번째 이메일을 보내려면 건너 뜁니다. – LordWood

+0

'$ users = Import-Csv $ importFile | Where-Object {$ _. 이름 -ne ""- 또는 $ _. To -ne ""또는 $ _. 첨부 파일 -ne ""또는 $ _. Attachment2 -ne ""} | 선택 개체 *'- 오류를 반환합니다 : – LordWood

관련 문제