Arrays 电子邮件格式数组
我得到了一个脚本,它创建了两个数组(每个数组有1列和可变的行数)。我想格式化这两个数组,并通过电子邮件将其发送到Outlook帐户。下面是代码和示例数据Arrays 电子邮件格式数组,arrays,email,powershell,Arrays,Email,Powershell,我得到了一个脚本,它创建了两个数组(每个数组有1列和可变的行数)。我想格式化这两个数组,并通过电子邮件将其发送到Outlook帐户。下面是代码和示例数据 $Values2=@(获取内容*\IdealOutput.csv) $OutputLookUp2=@() foreach($values中的值2){ $OutputLookUp2+=$Excel.WorksheetFunction.VLookup($Value,$range4,3,$false) } $Excel.Workbooks.Close
$Values2=@(获取内容*\IdealOutput.csv)
$OutputLookUp2=@()
foreach($values中的值2){
$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=“测试”
$Username=“示例”
$Password=“示例”
$Message=新对象Net.Mail.MailMessage`
($EmailFrom、$EmailTo、$EmailSubject、$EmailBody)
$SMTPClient=新对象Net.Mail.SMTPClient`
(“smtp.outlook.com”,端口号)#端口可以更改
$SMTPClient.EnableSsl=$true
$SMTPClient.Credentials=新对象System.Net.NetworkCredential`
($Username,$Password);
$SMTPClient.Send($Message)
$OutputLookUp2
和$Values2
都是一列,行数可变
例如:
$Outputlookup2 =
X1
X2
$Values2 =
Y1
Y2
我希望电子邮件正文的输出为:
X1 Y1
X2 Y2
我希望避免使用HTML,因为它也将通过文本发送。假设我的解释是正确的,这似乎很简单。对于每个
$Values2
,即文本文件中的一行,请在打开的电子表格中找到其类似的值。你有你需要的循环。问题是您正在构建相互独立的项目列表
$Values2=@(获取内容*\IdealOutput.csv)
$OutputLookUp2=@()
foreach($values中的值2){
$OutputLookUp2+=“$Value$($Excel.WorksheetFunction.VLookup($Value,$range4,3,$false))”
}
现在,$OutputLookUp2
应该以数组形式包含预期的输出
如果数组不起作用,也可以将其声明为字符串,并在构建时添加换行符。您将注意到字符串末尾的“`r`n”
$Values2=@(获取内容*\IdealOutput.csv)
$OutputLookUp2=“”
foreach($values中的值2){
$OutputLookUp2+=“$Value$($Excel.WorksheetFunction.VLookup($Value,$range4,3,$false))`r`n”
}
在这两个示例中,您只需翻转$value
的顺序即可轻松查找。如果需要标题,可以在声明$OutputLookUp2
时添加该标题
总有改进的余地
如果你想朝着逃避的方向走远一点
$OutputLookUp2=Get Content*\IdealOutput.csv | ForEach对象{
“$\$($Excel.WorksheetFunction.VLookup($\$range4,3,$false))”
}|外线
在循环中附加到数组执行效果很差,应该避免。另外,希望正文是字符串,而不是字符串数组,因此您可能希望在第一个示例中添加一个Out字符串
。使用管道将是优先选择,也是可以实现的。以下是您的观点@AnsgarWiechers?@AnsgarWiechers我不确定我的更新是否更好,或者您的意思是什么。如果你有反馈,我会感激。是的,我会考虑管道更优雅的方法。您甚至可以这样简化它:$output=gc input.csv |%{{0}{1}'-f$\$Excel.WorksheetFunction.VLookup($$\$range4,3,$false)}Out String
@AnsgarWiechers我最初考虑过格式运算符,但由于该运算符存在的特定问题而决定不使用它。尽量保持简单。让他慢慢来| Out String
比-当然要加入“`r`n”