我有一个创建两个数组的脚本(每个数组有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,因为它也将通过文本发送。
答案 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