如何从excel中提取数据并使用PowerShell自动发送邮件

时间:2014-02-05 14:24:07

标签: powershell

实际上,我对powershell很新,我对此并不了解。我的要求是:

我在MNC工作,我们必须每周7天,每天24小时轮班。在我们的名单中,我们有3个班次A,B& C.所有三分球在一天内都有不​​同的时间。

一旦创建了名单,我们需要向团队发送有关轮班的电子邮件,并告知团队所有人都有A,B& C班次。为此,我们需要进行手工工作以从Excel获取数据并将邮件发送给每个人。

但在这里我想自动完成,就像我想准备一个脚本,从名册excel表中提取数据,并在特定/特定时间自动发送邮件给组中的所有成员。

就像我们有3个班次所以我希望每当新班次开始时,所有会员的详细信息都会发送三次邮件。

我要求是否有人可以帮助我解决我的问题。我会非常感激他。

此致

AH

1 个答案:

答案 0 :(得分:1)

听起来你需要安排一项任务,根据需要每天运行3次脚本。

至于从Excel和PowerShell中获取数据我强烈建议使用MS脚本仓库中的函数Import-Xls(参见http://gallery.technet.microsoft.com/scriptcenter/17bcabe7-322a-43d3-9a27-f3f96618c74b)。该脚本是无害的,它只是加载您指定的Excel文档,要求Windows提供可用的临时文件名,然后将该名称另存为CSV文件。然后,它会将该CSV导入PowerShell,并关闭Excel并执行垃圾收集例程。

另一种方法是从Excel ComObject中完成所有操作,这只是丑陋而且比需要的更难。因此,假设您有一个带有标题名称,电子邮件和Shift的电子表格(使用A,B或C进行转移),您可能需要的是以下内容:

Function Import-Xls {PASTED IN FROM SCRIPT REFERENCED ABOVE}

Switch((get-date).Hour){
{($_ -ge 8) -and ($_ -lt 16)}{$Shift = "A"}
{$_ -ge 16}{$Shift = "B"}
{$_ -lt 8}{$Shift = "C"}}

$Schedule = Import-Xls "C:\Users\Public\Desktop\Schedule.xlsx"
$CurrentWorkers = $Schedule|?{$_.Shift -eq $Shift}|Select Name
$Schedule|?{$_.Shift -eq $Shift}|%{send-mailmessage -to "$($_.Name) <$($_.email)>" -from "Management <GenMgr@example.com>" -subject "Shift listing for $(get-date -format M/d/yy) shift $Shift" -body $CurrentWorkers -smtpserver smtp.ourcompany.com}

因此,如果它在上午8点到下午4点之间运行,则假定它适用于Shift A(B的午夜4点到午夜,C的午夜到8点),加载Excel文件,找出该班次的人员,并发送给他们所有电子邮件的主体只是该班次的人员列表。更多格式化或通过Outlook或其他东西发送邮件会更有效,但可行。这也假设您有一个可用的SMTP服务器。它至少包括如何将数据导入PowerShell以及如何使其自动选择班次并选择向谁发送邮件。