如何优化此电子邮件列表PowerShell脚本

时间:2017-04-26 11:05:09

标签: windows powershell

如何配置此脚本,以便我可以为多个地址(例如欧洲,亚洲)重复此邮寄过程,而无需多次复制代码?

例如,我可以这样做吗?:

IF $keyword "Europe"找到THEN $europe

$europe =欧洲的东西

THEN

IF $keyword "Asia"找到THEN $asia

这是我的代码:

   # Email Automation

    #Defines Directory
    $dir = "C:\Users\user\Desktop\myfolder"
    #Sets STMP server
    $SMTPServer = "10.0.0.1"
    #Declares todays time and formats
    $Time = (Get-Date).ToString('MM/dd/yyyy hh:mm tt')

    # Europe # 
    #Declares the keyword used to find List
    $keywordEur = "Europe" 

     #Searches dir for list , formats 
    $AttachmentEur = Get-ChildItem -Path $dir -Filter "*$keywordEur*" -Recurse
    $AttachmentNameEur = $AttachmentEur.BaseName

    #Defines mailing list
    $FromEur = "me@email.com"
    $ToEur = "you@europeemail.com"
    $CcEur = "him@email.com", "her@email.com"
    $SubjectEur = "$AttachmentName @ $Time"
    $BodyEur = "Please find attached the file needed for Europe. 

    Regards,
    Me
    "

    #Actions Email
    Send-MailMessage -From $FromEur -To $ToEur -CC $CcEur -Subject         $SubjectEur -Body $BodyEur -SmtpServer $SMTPServerEur -Attachments         $AttachmentEur.FullName

    # Asia # 
    #Declares the keyword used to find List
    $keywordAs = "Asia" 

     #Searches dir for list , formats 
    $AttachmentAs = Get-ChildItem -Path $dir -Filter "*$keywordAs*" -Recurse
    $AttachmentNameAs = $AttachmentAs.BaseName

    #Defines mailing list
    $FromAs = "me@email.com"
    $ToAs = "you@asiaemail.com"
    $CcAs = "him@email.com", "her@email.com"
    $SubjectAs = "$AttachmentNameAs @ $Time"
    $BodyAs = "Please find attached the file needed for Asia. 

    Regards,
    Me
    "

    #Actions Email
    Send-MailMessage -From $FromAs -To $ToAs -CC $CcAs -Subject $SubjectAs         -Body $BodyAs -SmtpServer $SMTPServerAs -Attachments $AttachmentAs.FullName

2 个答案:

答案 0 :(得分:0)

以下是如何使用ForEach循环和使用两个哈希表为区域构建的对象重复它:

# Email Automation

#Defines Directory
$dir = "C:\Users\user\Desktop\myfolder"
#Sets STMP server
$SMTPServer = "10.0.0.1"
#Declares todays time and formats
$Time = (Get-Date).ToString('MM/dd/yyyy hh:mm tt')

$Europe = @{            
    Name = 'Asia'
    From = "me@email.com"
    To = "you@email.com"
    Cc = "him@email.com", "her@email.com"
}

$Asia = @{  
    Name = 'Asia'          
    From = "me@email.com"
    To = "you@email.com"
    Cc = "him@email.com", "her@email.com"
}

$Regions = @()
$Regions += New-Object PSObject -Property $Asia
$Regions += New-Object PSObject -Property $Europe

ForEach ($Region in $Regions) {

    #Searches dir for list , formats 
    $Attachment = Get-ChildItem -Path $dir -Filter "*$($Region.name)*" -Recurse
    $AttachmentName = $Attachment.BaseName

    $Subject = "$AttachmentName @ $Time"
    $Body = "Please find attached the file needed for $($Region.name). 

    Regards,
    Me
    "
    #Actions Email
    Send-MailMessage -From $Region.From -To $Region.To -CC $Region.Cc -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Attachments $Attachment.FullName
}

答案 1 :(得分:0)

是的。由于关键字本身是唯一似乎改变的东西,所以将关键字放在一个数组中并将整个事物包装在一个循环中:

# Email Automation

#Define Directory
$dir = "C:\Users\user\Desktop\myfolder"
#Set STMP server
$SMTPServer = "10.0.0.1"
#Declare todays time and formats
$Time = (Get-Date).ToString('MM/dd/yyyy hh:mm tt')

#Define mailing list
$From = "me@email.com"
$To = "you@email.com"
$Cc = "him@email.com", "her@email.com"

#Declares the keywords used to find attachments
$keywords = 'Europe','Asia'

foreach($keyword in $keywords){
    #Searches dir for list , formats 
    $Attachment = Get-ChildItem -Path $dir -Filter "*$keyword*" -Recurse
    $AttachmentName = $Attachment.BaseName

    $Subject = "$AttachmentName @ $Time"
    $Body = "Please find attached the file needed for $keyword. 

    Regards,
    Me
    "

    #Actions Email
    Send-MailMessage -From $From -To $To -CC $Cc -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Attachments $Attachment.FullName
}
相关问题