取消注册所有自定义对象事件

时间:2017-07-24 16:44:38

标签: powershell object events

我想在取消注册任何自定义Register-ObjectEvent的所有代码之前运行命令;一些类似于Remove-Jobs *的命令用于对象事件。我想这样做是因为如果我尝试两次注册$watcher会引发错误。没有名为Get-ObjectEvent的命令,否则我不会问这个

$folder = "C:\some\path\to\folder"

# File it is watching
$filter = "flag.txt"

# Instantiate Watcher 
$Watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{ 
    IncludeSubdirectories = $false
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}

# EVENT: $filter is created
$onCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier FileCreated -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"
    Write-Host $path
}

1 个答案:

答案 0 :(得分:2)

虽然可能没有Get-ObjectEvent,但 Get-EventSubscriber

Get-EventSubscriber | Unregister-Event

此外,事件订阅是进程本地的,因此终止PowerShell进程也会删除其中的订阅。