问题: 我需要一个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是位置编号。
我真正想要的是什么: 为了更进一步,我想删除坏文件头和&详细文件并通过电子邮件将扩展名发送到业务部门
过程将是:
答案 0 :(得分:1)
只需迭代Select-String cmdlet中的所有匹配项,然后使用regex
为Remove-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
}
。