【问题标题】:Unregister all custom object events注销所有自定义对象事件
【发布时间】:2017-12-30 08:29:45
【问题描述】:

我想在所有这些取消注册任何自定义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
}

【问题讨论】:

    标签: powershell object events


    【解决方案1】:

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

    Get-EventSubscriber | Unregister-Event
    

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

    【讨论】:

    • 太棒了!这正是我一直在寻找的
    【解决方案2】:

    我所做的是在 Register-ObjectEvent 之前有一行:

    Unregister-Event -SourceIdentifier FileCreated -EA 0
    

    (给它你的事件名称)

    -EA 0 抑制抛出的任何错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-21
      • 2012-09-29
      • 2022-10-20
      • 2013-04-28
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多