Это не совсем проблема вызова функции из «анонимной» (называемой блоком сценариев).
Здесь происходит следующее: когда вы указываете действие для Register-ObjectEvent
, оно настраивает задание и отправляет действие в качестве команды для задания. Когда происходит событие и задание выполняется, оно не имеет ни малейшего представления о том, что представляет собой функция теста.
Если вы на самом деле выполните Get-Job
и увидите задание, вы увидите, что оно провалилось. Самое простое решение - встроить код. Или используйте функцию в своем сеансе, определив ее с помощью global
scope:
function global:test
{
Write-Host "send email"
}
или вручную, просто определив его в консоли или добавив в свой профиль.
В качестве альтернативы, вы можете добавить функцию в скрипт, скажем test.ps1
, указать ее источник в вашем $action
- . path\to\test.ps1
и затем вызвать test
:
$action = {
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp"
. c:\test.ps1
test
}