2012-08-14 60 views
2

我有腳本在特定目錄中監視文件創建。 我使用註冊-ObjectEvent創建System.IO.FileSystemWatcher後,Powershell調試事件 - 行爲代碼塊

它的偉大工程,但如果我在清議代碼塊設置一個斷點的IDE生成:

警告:斷點在'D:\我的東西\桌面\腳本\ 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

如果來自同一ISE或控制檯會話直接PowerShell命令觸發事件,它的實際工作:

$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控制檯窗口,或在shell提示
  4. 等待,直到你知道你的情況應該解僱由於外部進程
  5. 點擊「進入」,讓讀主機來完成

中提琴,斷點命中!

+0

謝謝,至少我現在知道它不是我。我用舊時尚調試器(Write-Host的船載)調試它。 – Pablo 2012-08-17 00:09:29