如果在PowerShell

时间:2016-06-02 18:45:00

标签: email powershell

问题: 我需要一个PowerShell脚本来检查文件夹中的每个文件是否有特定字符(#),然后仅在找到该字符时通过电子邮件发送文件名。

我拥有的东西:我仍然是循环/测试逻辑的新手,并且不确定它适合的位置。我当前的脚本成功检查了坏字符,但是无论是否发现了某些内容都会发送电子邮件或不。

$scr = dir \\fileshare\businessfolder\filedrop | Select-String '#'

$FromAddress = "myself@something.com"

$ToAddress = "myself@something.com"

$MessageSubject = "Bad Character Detected"

$SendingServer = "mail.something.com"

$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject,$scr

$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer

$SMTPClient.Send($SMTPMessage)

目前在电子邮件中输出:

  

\文件共享\ businessfolder \ filedrop \ AD060101.107:3:#N / A   \文件共享\ businessfolder \ filedrop \ AD060102.107:3:#N / A   \文件共享\ businessfolder \ filedrop \ AD060101.103:14:#N / A

我正在扫描的文件以这种方式格式化:

AHMMDDNN.LLL

ADMMDDNN.LLL

AH / AD指示它是标题还是详细信息,MMDD是月/日,NN是它是当天生成的第一个文件,第二个生成的文件,等等。 LLL是位置编号。

我真正想要的是什么: 为了更进一步,我想删除坏文件头和&详细文件并通过电子邮件将扩展名发送到业务部门

过程将是:

  1. 在文件夹中的所有文件中扫描“#”。
  2. 删除ADMMDDNN.LLL和相应的AHMMDDNN.LLL文件。 (示例:AD060101.107中有一个'#',所以删除它和AH060101.107文件)
  3. 发送电子邮件,说明“位置LLL已被删除,请重新创建文件”。 (例如:“位置107已被删除,请重新创建文件”)

1 个答案:

答案 0 :(得分:1)

只需迭代Select-String cmdlet中的所有匹配项,然后使用regexRemove-Item(别名rm)cmdlet创建模式,如{ {1}}:

A[D|H]060101.103

注意:我省略了电子邮件部分,但将邮件添加到$filesToDelete = Select-String -Path '\\fileshare\businessfolder\filedrop\*' -Pattern '#' $filesToDelete | ForEach-Object { 'location {0} has been deleted, please recreate file' -f ($_.Filename -split '\.')[-1] $_.Path -replace '(.*\\A).(.*)', '$1[D|H]$2' | rm -Force -ea 0 }