2012-08-14 2 views
2

У меня есть сценарий, наблюдающий за созданием файла в определенном каталоге. Я использую Регистр-ObjectEvent после создания System.IO.FileSystemWatcher,Событие отладки Powershell -Action code block

Он отлично работает, но если я установить точку останова в блоке -действие кода интегрированная среда генерирует:

ВНИМАНИЕ: Breakpoint Линейная точка останова на «D: \ MyStuff \ Desktop \ scripts \ fileWatcher.ps1: 15 'не будет удалена

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

Это нормально?
Мне нужно добавить еще код и действительно использовать отладчик. Что мне делать, поэтому я могу отлаживать этот блок кода?

$fsw = [System.IO.FileSystemWatcher] $path 

Register-ObjectEvent -InputObject $fsw –EventName Created -SourceIdentifier DDFileCreated -Action { 
    $name = $Event.SourceEventArgs.Name 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated 
    Write-Host "The file '$name' was $changeType at $timeStamp" -fore green 
    Out-File -FilePath $logFile -Append -InputObject "The file '$name' was $changeType at $timeStamp" 
} 

ответ

2

Если вы вызываете событие из прямой команды Powershell в том же сеансе ISE или консоли, это на самом деле работает:

$path = (Resolve-Path '~\').Path 
if(Test-Path "$path\newfile.txt"){ del "$path\newfile.txt" } 

$fsw = [System.IO.FileSystemWatcher] $path 

Register-ObjectEvent -InputObject $fsw –EventName Created -SourceIdentifier DDFileCreated -Action { 
    $name = $Event.SourceEventArgs.Name # put breakpoint here, via ISE or script 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated 
    Write-Host "The file '$name' was $changeType at $timeStamp" -fore green 
} 

'foo' | out-file "$path\newfile.txt" # breakpoint hit 

Но если вы просто подключить событие и ждать какого-то внешнего процесса для создания файла я вижу проблему, с которой вы сталкиваетесь.

Итак, если вы можете добавить тестовый код, чтобы напрямую инициировать ваше событие, пойдите с этим.

Если нет, то читайте дальше ...

Похоже, вы не можете войти в отладчик, а оболочка или ISE является ждет новой команды, вы можете ввести только в то время как другая команда выполняет.

Идущий с этой теорией, это обходной путь (работает для меня):

  1. Установите свои точки останова
  2. запустить свой событие подписки код
  3. Выполните команду «Read-Host» в ISE окно консоли или из командной строки в оболочке
  4. Подождите, пока вы не знаете, ваше мероприятие должно быть уволены из-за внешний процесс
  5. Хита «войти», чтобы Read-Host для завершения

Виола, точка останова попала!

+0

спасибо, по крайней мере, теперь я знаю его не я. Я «отлаживал» его от старого отладчика моды (нагрузка на лодку Write-Host). – Pablo

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