2016-04-01 27 views
0

PowerShell'de birden fazla alıcıya e-posta göndermeye çalışıyorum.Tek işlevli parametre olarak birden fazla dizeyi geçirme

PowerShell 1.0 yolunu biliyorum ama kullanmak istemiyorum.

$smtpServer = "email.server.local" 
$from = "[email protected]" 
$subject = "Subject" 
$body = "Test" 

Send-Mail $smtpServer $from ("[email protected]", "[email protected]") $subject $body 

..ama ben

$to = "[email protected]", "[email protected]" 
Send-Mail $smtpServer $from $to $subject $body 

Posta koyarsanız sadece gider:

Benim eposta fonksiyonu bunu yaptığıma ne istediğini elde edebilirsiniz bu

function Send-Mail() { 

    Param ( 
      # email attributes  
      [string]$smtpServer, 
      [string]$from, 
      [string[]]$to, 
      [string]$subject, 
      [string]$body 
    ) 

    Send-MailMessage -To $to -Subject $subject -BodyAsHtml $body -SmtpServer $smtpServer -From $from 
} 

benziyor ikinci alıcı

İşlevde yerel olarak $to ayarlıyorum, bu da düzgün çalışıyor, bu nedenle sorun parametreyi işleve iletiyor.

+0

_ PowerShell 1.0 yolu hakkında bildiklerim var ama ben bunu ortalama kullanmak istemiyorum? – Matt

+0

Hangi sürüm PowerShell kullanıyorsunuz? 'Al-Host'. İkinci örneğinizle burada göremiyorum ve bu benim için çalışıyor. – Matt

+0

@Paul Bu işe yaramıyor. $, onun açılacağı bir dizi dizisi istiyor. İşlevsel operatör türünü kullanırken, işlev parametre türünü de değiştirmediğiniz sürece, bu alanı boşlukla ayrılmış bir dizgeye dönüştürecektir. – Matt

cevap

0

Bu şekilde gönderdim ve bir çekicilik gibi çalıştı. PS v4 Windows Server fonksiyon amaçlı 2012

Send-MailMessage -To "[email protected]", "[email protected]" -Body "TEST" -From "[email protected]" -Subject "TEST" -SmtpServer smarthost.domain.com 

, ben bir dizi olarak e-postaları göndermek istiyorum. Bu da benim için çalıştı.

$array = New-Object System.Collections.ArrayList 
$array += "[email protected]" 
$array += "[email protected]" 
Send-MailMessage -To $array -Body "TEST" -From "[email protected]" -Subject "TEST" -SmtpServer smarthost.domain.com 

... ve sonuçta, bu sadece iyi senin işlevini kullanarak benim için çalıştı.

function Send-Mail() { 
    Param ( 
     # email attributes  
     [string]$smtpServer, 
     [string]$from, 
     [string[]]$to, 
     [string]$subject, 
     [string]$body 
    ) 
    Send-MailMessage -To $to -Subject $subject -BodyAsHtml $body -SmtpServer $smtpServer -From $from 
} 
$array = New-Object System.Collections.ArrayList 
$array += "[email protected]" 
$array += "[email protected]" 
Send-Mail -smtpServer "smarthost.domain.com" ` 
      -from  "[email protected]"  ` 
      -to   $array     ` 
      -subject "Test"     ` 
      -body  "TEST" 
0

gayet güzel çalışmış olmalıdır burada listeledik kod olmalı $to ayarlayacaktır. PowerShell yazım söz konusu olduğunda oldukça bağışlayıcıdır ve sizin için en iyi seçimi yapacaktır. Ancak, kendinizi ev sahibi olmadan önce oturumunuzda bir noktada yaptığınızdan şüphelendiğim [string] olarak kendinizi atabilirsiniz. Geçen sette sizi System.Object[] beklenen olabileceğini ancak şiddetle önceki bir çizgide dökme beri çıkarılana kadar bu o tip kaldığını Aşağıdaki örnekler

PS C:\Users\matt> $to = "[email protected]", "[email protected]" 

PS C:\Users\matt> $to.GetType().Fullname 
System.Object[] 

PS C:\Users\matt> [string]$to = "[email protected]" 

PS C:\Users\matt> $to.GetType().Fullname 
System.String 

PS C:\Users\matt> $to = "[email protected]", "[email protected]" 

PS C:\Users\matt> $to.GetType().Fullname 
System.String 

Not düşünün. Burada değişkeni

PS C:\Users\mcameron> Get-Variable to | fl 

Name  : to 
.... output truncated ... 
Attributes : {System.Management.Automation.ArgumentTypeConverterAttribute} 

Anahtar noktayı inceleyerek güçlü döküm sonra ortaya çıktı Özellik System.Management.Automation.ArgumentTypeConverterAttribute olduğunda

Ayrıca bu görebilirsiniz. Bir oturum sırasında veya kod çalıştırma sırasında, değişkeni Remove-Variable to ile baştan başlatabilirsiniz.

+0

Yukarıdaki açıklama için teşekkürler. İlk çıktıda konsol çıktısını girdilerinizin altına koyarsanız daha kullanışlı olurdu, bu yüzden DÜZENLİĞİ takip etmek daha kolaydı: Sadece bunu yaptığınızı gördüyseniz ancak vurgulama işleri karıştırıyor (en azından benim için). Teşekkürler. – ATtheincredibleaf