如何提供事件注册选项?

时间:2019-07-11 17:25:52

标签: powershell

我不明白为什么以下代码会生成错误消息。 Powershell似乎很难学习。

$fsw = New-Object IO.FileSystemWatcher ...

$Action = {Param($option)
if ($option -eq "Copy")
   {Write-Host "Copy was specified"}
}

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action $Action
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action $Action -ArgumentList Copy

(这是问题How to provide options to script blocks?的更新版本)

1 个答案:

答案 0 :(得分:0)

如有疑问,请阅读documentationRegister-ObjectEvent cmdlet没有参数-ArgumentList,因此在尝试使用不具有参数的cmdlet调用时出错。正如我在对上一个问题的评论中已经告诉您的那样,首先将参数传递给事件操作不是您想做的事情。

如果您的动作非常相似,以至于定义了不同的动作脚本块,则可以通过脚本块中的事件来轻松区分,因为该信息会自动(通过变量$Event)传递给动作。

$Action = {
    $name = $Event.SourceEventArgs.Name
    $type = $Event.SourceEventArgs.ChangeType

    switch ($type) {
        'Created' { Write-Host "file ${file} was created" }
        'Changed' { Write-Host "file ${file} was changed" }
    }
}