我不明白为什么以下代码会生成错误消息。 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?的更新版本)
答案 0 :(得分:0)
如有疑问,请阅读documentation。 Register-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" }
}
}