2015-10-09 10 views
3

Я хочу посмотреть папку с powershell, и я начинаю PS.Отменить регистрацию зарегистрированного события filewatcher не работает

Этот скрипт работает только один раз, когда я запускаю сценарий.

Но когда я должен перезапустить скрипт снова, потому что я изменил код сценария, я получаю сообщение об ошибке:

Cannot subscribe to the specified event. A subscriber with the source identifier 'FileChanged' already exists. 

Я попытался:

это в верхней части сценария:

Unregister-Event -SourceIdentifier FileChanged 

не работает.

Как правильно отменить регистрацию события, чтобы я мог запускать свой сценарий так часто, как хочу, и ранее зарегистрированное событие было удалено?

КОД

$folder = "C:\temp" 

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

$onChanged = Register-ObjectEvent $Watcher Changed -SourceIdentifier FileChanged -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 
    #Move-Item $path -Destination $destination -Force -Verbose 
} 
+0

Невозможно воспроизвести это на PowerShell v5 или v2. Не могли бы вы предоставить [mcve]? – PetSerAl

+0

Этот скрипт запускался на сервере. Когда я запускаю скрипт локально, он отлично работает! – Elisabeth

+0

Зачем вам отменять регистрацию, если вам нужно использовать его снова? Как только он будет находиться в памяти, он должен продолжать работать, пока сеанс PowerShell остается открытым. Не нужно повторять его. – Matt

ответ

4

Хорошо, глядя на то, что вы пытаетесь достичь ... чтобы ответить на ваш первоначальный вопрос, вам нужно сделать следующее незарегистрированного события.

Get-EventSubscriber -SourceIdentifier "filechanged" | Unregister-Event 

Я должен спросить, почему вы должны внести 1000 поправок в код. Если вы пытаетесь зарегистрировать 1000 различных событий, которые будут отслеживаться, было бы более целесообразно циклически и увеличивать переменную с помощью модификатора ++.

Я уже достиг этого, если это то, что вы связываете, и можете поделиться некоторым кодом, если вам это нужно.

+0

вы не должны воспринимать мой «1000» комментарий буквально, это было ироническое описание ;-) – Elisabeth

+1

Не следует так говорить, но я не понимаю, почему вы постоянно вносили поправки в код? –

+0

У меня такая же проблема, и Элизабет, в моем случае ответ на ваш вопрос заключается в том, что я все еще разрабатываю код, вызванный событием, и я хотел бы просто запустить сценарий снова, но столкнулся с «подписчиком» уже существует 'и хотел бы, чтобы это было разумно, когда я снова запустил его. –

Смежные вопросы