Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 电子邮件格式数组_Arrays_Email_Powershell - Fatal编程技术网

Arrays 电子邮件格式数组

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

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

$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”