电子邮件格式化数组

时间:2015-05-16 19:33:35

标签: arrays email powershell

我有一个创建两个数组的脚本(每个数组有1列和可变数量的行)。我想格式化这两个数组并通过电子邮件发送到Outlook帐户。下面的代码和示例数据。

$Values2 = @(Get-Content *\IdealOutput.csv) 

$OutputLookUp2 = @()
foreach ($Value in $Values2) {
    $OutputLookUp2 += $Excel.WorksheetFunction.VLookup($Value,$range4,3,$false)
}

$Excel.Workbooks.Close()
$Excel.Quit()

$EmailFrom = "sample@sample.com"  
$EmailTo = "sample@sample.com"
$EmailBody = "$Values2 $OutputLookup2" 
$EmailSubject = "Test"
$Username = "sample"
$Password = "sample"

$Message = New-Object Net.Mail.MailMessage `
    ($EmailFrom, $EmailTo, $EmailSubject, $EmailBody)
$SMTPClient = New-Object Net.Mail.SmtpClient `
    ("smtp.outlook.com", portnumber) #Port can be changed
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential `
    ($Username, $Password);
$SMTPClient.Send($Message)

$OutputLookUp2$Values2都是一列,行数可变。

示例:

$Outputlookup2 = 
X1 
X2

$Values2 = 
Y1 
Y2

我希望输出到电子邮件正文:

X1 Y1
X2 Y2

我想避免HTML,因为它也将通过文本发送。

1 个答案:

答案 0 :(得分:2)

假设我的解释是正确的,这似乎很简单。对于每个$Values2,它只是文本文件中的一行,在打开的电子表格中找到它的相似值。你有你需要的循环。问题是您正在构建彼此独立的项目列表。

$Values2 = @(Get-Content *\IdealOutput.csv) 

$OutputLookUp2 = @()
foreach ($Value in $Values2){
    $OutputLookUp2 += "$Value $($Excel.WorksheetFunction.VLookup($Value,$range4,3,$false))"
}

现在$OutputLookUp2应该包含数组形式的预期输出。

如果数组不起作用,您也可以将其声明为字符串,并在构建时添加换行符。你会注意到字符串末尾的"`r`n"

$Values2 = @(Get-Content *\IdealOutput.csv) 

$OutputLookUp2 = ""
foreach ($Value in $Values2){
    $OutputLookUp2 += "$Value $($Excel.WorksheetFunction.VLookup($Value,$range4,3,$false))`r`n"
}

在这两个示例中,您只需翻转$value的顺序并轻松查找。如果您需要标题,可以在声明$OutputLookUp2

时添加标题

总有提升空间

如果你想在Ansgar Wiechers 躲避的方向上进一步采取这一点......

$OutputLookUp2 = Get-Content *\IdealOutput.csv | ForEach-Object{
    "$_ $($Excel.WorksheetFunction.VLookup($_,$range4,3,$false))"
} | Out-String