Powershell - 复制CSV,修改标题以及不断更新新CSV

时间:2014-09-15 14:03:28

标签: powershell powershell-v3.0

我们有一个记录通过我们传真服务器发送的传真的日志。它是一个.csv,包含Date_Time,Duration,CallerID,Direction(即inbound / outbound),Dialed#和Answered#。使用在传真服务器上跟踪的任何新信息,每隔10分钟覆盖此文件。这不能更改为附加。

有时我们的传真会失败,并且这些传真的持续时间将等于00:00:00。我们真的不知道他们是否失败,直到用户告诉我们他们收到有关丢失传真的投诉。我正在尝试创建一个Powershell脚本,可以读取文件并通过电子邮件通知我们,如果有多少失败。

我开始研究它,但是当我遇到更多问题时,它很快变得很乱。我试图克服的一个问题是,如果有某些失败,请一遍又一遍地给我们发电子邮件。由于我无法在原始.csv上保存任何内容,因此我试图在脚本中预先形成这些想法。

  • 使用标题为“LoggedFailure”的新标题复制.csv。如果文件不存在,请创建文件。
  • 比较两个文件,并将不同的数据(即原件上的更新)添加到副本中。
  • 检查复制的.csv,持续时间等于00:00:00。如果是,请将LoggedFailure标头标记为“是”或某个值。
  • 如果有多少失败,请给我们发电子邮件。
  • 让此脚本作为计划任务运行(每小时左右)。

我在维护数据时遇到了困难。我没有做过很多脚本或编程工作,所以我在制作正确的逻辑时遇到了麻烦。我可以查找cmdlet并理解它们,但我的主要问题是逻辑。有没有人有任何提示或者可以提供一些关于如何最好地更新数据,跟踪故障以便不发送重复信息并让它运行的想法?

1 个答案:

答案 0 :(得分:1)

我使用带有Dialed#的哈希表作为密钥。创建具有LastFail日期和FailCount属性的PSCustomObjects作为值。按时间顺序读取日志,并在每次找到持续时间为00:00:00的条目时,在哈希表中添加/增加一个新条目,该条目比哈希表中已有的条目更新。如果找到成功的传递事件,则从哈希表中删除带有Dialed#键的条目(如果存在)。

当它完成时,哈希表键将是失败的已拨号码的集合,值中的对象将告诉您已经有多少次失败,以及最后一次失败的时间。使用它来确定是否需要发送警报以及要报告的数字。

解决了给定传真号码的问题后,成功传真到该号码将清除哈希表中的条目,并停止提醒。

通过将哈希表导出为CLIXML来保存运行之间的哈希表,并在每次运行开始时重新导入它。