2012-08-14 2 views
2

특정 디렉터리에서 파일 만들기를 보는 스크립트가 있습니다. 나는 System.IO.FileSystemWatcher를 생성 한 후 등록-ObjectEvent을 사용하고 ,Powershell 디버깅 이벤트 - 액션 코드 블록

그것은 잘 작동하지만, 나는 - 액션 코드 블록에 브레이크 포인트를 설정하면 IDE가 생성

경고 : 중단 점 'D : \ My Stuff \ Desktop \ scripts \ fileWatcher.ps1 : 15'의 줄 중단 점은 적용되지 않습니다.

이 메시지는 내가보고있는 디렉터리에 파일을 놓은 직후에 발생하며 내 쓰기가 표시됩니다. 위의 '경고'바로 뒤에 내 메시지를 인쇄합니다.

정상입니까?
더 많은 코드를 추가해야하고 디버거를 실제로 사용할 수 있습니다 .. 이 코드 블록을 디버그 할 수 있도록 할 수있는 작업은 무엇입니까? 같은 ISE 또는 콘솔 세션에서 직접 PowerShell 명령에서 이벤트를 트리거하는 경우

$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

, 실제로 작동합니다

$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. 명령을 실행 "읽기 호스트"는 ISE에 콘솔 창 또는 셸 프롬프트에서
  4. 외부 프로세스로 인해 이벤트가 발생해야 할 때까지 기다려주십시오.
  5. 읽기 호스트가 완료되도록하려면 "enter"를 누르십시오.

비올라, 중단 점 히트!

+0

감사합니다. 적어도 지금은 그렇지 않습니다. 나는 옛 패션 디버거 (Write-Host의 보트로드)로 디버깅했다. – Pablo