将多个字符串作为单个函数参数传递
Passing multiple strings as single function parameter
我正在尝试在 PowerShell 中向多个收件人发送电子邮件。
我知道 PowerShell 1.0 方式,但我不想使用它。
我的电子邮件功能如下所示
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
}
我可以实现我想要的:
$smtpServer = "email.server.local"
$from = "sender@email.com"
$subject = "Subject"
$body = "Test"
Send-Mail $smtpServer $from ("user1@email.com", "user2@email.com") $subject $body
..但是如果我把
$to = "user1@email.com", "user2@email.com"
Send-Mail $smtpServer $from $to $subject $body
邮件只发送给第二个收件人
如果我在函数本地设置 $to
,这也能正常工作,所以问题是将参数传递给函数。
$to = @("user1@email.com", "user2@email.com")
会将 $to
设置为数组
您在此处列出的代码应该可以正常工作。 PowerShell 在输入方面相当宽容,它会为您做出最佳选择。但是,您可以将自己塑造成 [string]
,例如,我怀疑您在主持之前在 session 中的某个时候做过。考虑以下示例
PS C:\Users\matt> $to = "user1@email.com", "user2@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.Object[]
PS C:\Users\matt> [string]$to = "user1@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.String
PS C:\Users\matt> $to = "user1@email.com", "user2@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.String
请注意,在最后一组中,您可能期望 System.Object[]
但由于它在较早的行中被强烈转换,因此它 保持该类型 直到它被删除。
检查变量时也可以看到这一点
PS C:\Users\mcameron> Get-Variable to | fl
Name : to
.... output truncated ...
Attributes : {System.Management.Automation.ArgumentTypeConverterAttribute}
这里的重点是System.Management.Automation.ArgumentTypeConverterAttribute
强投后出现的属性。在 session 期间或代码执行期间,您可以使用 Remove-Variable to
简单地删除变量,这样您就可以重新开始。
我是这样发送的,效果很好。 PS v4,Windows 服务器 2012
Send-MailMessage -To "firstemail@domain.com", "secondemail@domain2.com" -Body "TEST" -From "test@domain.com" -Subject "TEST" -SmtpServer smarthost.domain.com
出于您的功能目的,我会将电子邮件作为数组提交。这对我也有用。
$array = New-Object System.Collections.ArrayList
$array += "email1@domain1.com"
$array += "email2@domain2.com"
Send-MailMessage -To $array -Body "TEST" -From "test@domain.com" -Subject "TEST" -SmtpServer smarthost.domain.com
...最终,使用您的函数对我来说效果很好。
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 += "email1@domain1.com"
$array += "email2@domain2.com"
Send-Mail -smtpServer "smarthost.domain.com" `
-from "test@domain.com" `
-to $array `
-subject "Test" `
-body "TEST"
我正在尝试在 PowerShell 中向多个收件人发送电子邮件。
我知道 PowerShell 1.0 方式,但我不想使用它。
我的电子邮件功能如下所示
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
}
我可以实现我想要的:
$smtpServer = "email.server.local"
$from = "sender@email.com"
$subject = "Subject"
$body = "Test"
Send-Mail $smtpServer $from ("user1@email.com", "user2@email.com") $subject $body
..但是如果我把
$to = "user1@email.com", "user2@email.com"
Send-Mail $smtpServer $from $to $subject $body
邮件只发送给第二个收件人
如果我在函数本地设置 $to
,这也能正常工作,所以问题是将参数传递给函数。
$to = @("user1@email.com", "user2@email.com")
会将 $to
设置为数组
您在此处列出的代码应该可以正常工作。 PowerShell 在输入方面相当宽容,它会为您做出最佳选择。但是,您可以将自己塑造成 [string]
,例如,我怀疑您在主持之前在 session 中的某个时候做过。考虑以下示例
PS C:\Users\matt> $to = "user1@email.com", "user2@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.Object[]
PS C:\Users\matt> [string]$to = "user1@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.String
PS C:\Users\matt> $to = "user1@email.com", "user2@email.com"
PS C:\Users\matt> $to.GetType().Fullname
System.String
请注意,在最后一组中,您可能期望 System.Object[]
但由于它在较早的行中被强烈转换,因此它 保持该类型 直到它被删除。
检查变量时也可以看到这一点
PS C:\Users\mcameron> Get-Variable to | fl
Name : to
.... output truncated ...
Attributes : {System.Management.Automation.ArgumentTypeConverterAttribute}
这里的重点是System.Management.Automation.ArgumentTypeConverterAttribute
强投后出现的属性。在 session 期间或代码执行期间,您可以使用 Remove-Variable to
简单地删除变量,这样您就可以重新开始。
我是这样发送的,效果很好。 PS v4,Windows 服务器 2012
Send-MailMessage -To "firstemail@domain.com", "secondemail@domain2.com" -Body "TEST" -From "test@domain.com" -Subject "TEST" -SmtpServer smarthost.domain.com
出于您的功能目的,我会将电子邮件作为数组提交。这对我也有用。
$array = New-Object System.Collections.ArrayList
$array += "email1@domain1.com"
$array += "email2@domain2.com"
Send-MailMessage -To $array -Body "TEST" -From "test@domain.com" -Subject "TEST" -SmtpServer smarthost.domain.com
...最终,使用您的函数对我来说效果很好。
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 += "email1@domain1.com"
$array += "email2@domain2.com"
Send-Mail -smtpServer "smarthost.domain.com" `
-from "test@domain.com" `
-to $array `
-subject "Test" `
-body "TEST"