Get-Content读取行时如何调用函数

时间:2019-07-19 19:30:52

标签: powershell pipeline

我正在设置一个脚本,该脚本将在每次写入某个日志文件时向我发送电子邮件,但是当Get-Content读取新行时,管道将不会调用sendmail函数。

sendmail函数在下一行之前定义,并且可以成功向我自己发送一封电子邮件。

Get-Content -Tail 0 -Wait app.log | sendmail

2 个答案:

答案 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,您希望此部分代码针对在管道上传递的每个对象(在本例中为每一行)运行。如果要从流程块内部访问当前对象,请使用$_作为变量。

请参见Piping Objects to Functions