Email 如果在PowerShell中检测到字符/字符串,则发送电子邮件
问题: 我需要一个PowerShell脚本,用于检查文件夹中的每个文件是否有特定字符(#),然后仅在找到该字符时才通过电子邮件发送文件名 我所拥有的:我对循环/测试逻辑仍然是新手,不确定它适合哪里。我当前的脚本成功地检查了坏角色,但不管是否发现了什么,都会发送电子邮件Email 如果在PowerShell中检测到字符/字符串,则发送电子邮件,email,powershell,Email,Powershell,问题: 我需要一个PowerShell脚本,用于检查文件夹中的每个文件是否有特定字符(#),然后仅在找到该字符时才通过电子邮件发送文件名 我所拥有的:我对循环/测试逻辑仍然是新手,不确定它适合哪里。我当前的脚本成功地检查了坏角色,但不管是否发现了什么,都会发送电子邮件 $scr = dir \\fileshare\businessfolder\filedrop | Select-String '#' $FromAddress = "myself@something.com" $ToAddre
$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)
这将在电子邮件中当前输出:
\fileshare\businessfolder\filedrop\AD060101.107:3:#不适用
\fileshare\businessfolder\filedrop\AD060102.107:3:#不适用
\fileshare\businessfolder\filedrop\AD060101.103:14:#不适用
我正在扫描的文件的格式如下:
AHMMDDNN.LLL
ADMMDDNN.LLL
AH/AD表示它是标题还是细节,MMDD表示月/日,NN表示它是当天生成的第一个文件,第二个生成的文件,等等。LLL是位置号
我真正想要的:
为了更进一步,我想删除错误的文件头和详细信息文件,并通过电子邮件将扩展名发送给业务部门
这一进程将是:
只需迭代cmdlet中的所有匹配项,并使用
regex
为(别名rm
)cmdlet创建模式,如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
}
注意:我省略了电子邮件部分,但将消息添加到
foreach
$src
将是一个匹配对象,而不仅仅是一个字符串,因此它将包含您需要的大部分信息。即作为属性的文件路径。你试过自己完成问题的这一部分吗?我在示例中迷失了方向:AD060101.107中有一个“#”。您的意思是在AD060101.107
文件内容中找到的#
字符(数字符号)?是的,对不起,###是107,还是3?谢谢!我使用您提供的工具运行,并在我的测试环境中获得了成功,但是我了解到,我需要在Unix上运行此工具,而且脚本无法工作,它甚至不会抛出错误消息。你有什么想法吗?没有,对不起。您可以检查$filesToDelete
是否为空。