我正在设置一个脚本,该脚本将在每次写入某个日志文件时向我发送电子邮件,但是当Get-Content读取新行时,管道将不会调用sendmail函数。
sendmail函数在下一行之前定义,并且可以成功向我自己发送一封电子邮件。
Get-Content -Tail 0 -Wait app.log | sendmail
答案 0 :(得分:1)
您需要了解什么是流程块。它针对插入的每个元素运行。将您的代码放入流程块中,它将执行您想要的操作,就像其他人已经回答了那样。流程块在Powershell中非常重要。
var newlist = Slist.Where(x => x == "Tom" || x == "Dick" || x == "Harry" )).ToList();
答案 1 :(得分:1)
您应该通过流程块从管道中获取值:
function sendmail {
process {
$secpasswd = ConvertTo-SecureString "password" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("username", $secpasswd)
Send-MailMessage -SmtpServer mysmtp -Credential $cred -UseSsl -From 'myemail@domain.com' -To 'toemail@domain.com' -Subject 'TEST'
}
}
这将告诉PowerShell,您希望此部分代码针对在管道上传递的每个对象(在本例中为每一行)运行。如果要从流程块内部访问当前对象,请使用$_
作为变量。