我有脚本监视特定目录中的文件创建。\n我在创建 System.IO.FileSystemWatcher 后使用 Register-ObjectEvent,
\n\n它工作得很好,但如果我在 -Action 代码块中设置断点,IDE 会生成:
\n\n警告:不会命中 \'D:\\My Stuff\\Desktop\\scripts\\fileWatcher.ps1:15\' 上的断点行断点
\n\n在我将文件放入我正在监视的目录中后,此消息立即发生,并且我可以看到我的写入主机在上述“警告”之后立即打印出我的消息。
\n\n这是正常的吗?
\n我需要添加更多代码并且可以真正使用调试器..\n我应该做什么,以便我可以调试此代码块?
$fsw = [System.IO.FileSystemWatcher] $path\n\nRegister-ObjectEvent -InputObject $fsw \xe2\x80\x93EventName Created -SourceIdentifier DDFileCreated -Action { \n $name = $Event.SourceEventArgs.Name \n $changeType = $Event.SourceEventArgs.ChangeType \n $timeStamp = $Event.TimeGenerated \n Write-Host "The file \'$name\' was $changeType at $timeStamp" -fore green \n Out-File -FilePath $logFile -Append -InputObject "The file \'$name\' was $changeType at $timeStamp"\n} \nRun Code Online (Sandbox Code Playgroud)\n
如果您在同一 ISE 或控制台会话中通过直接 powershell 命令触发该事件,它实际上会起作用:
\n\n$path = (Resolve-Path \'~\\\').Path\nif(Test-Path "$path\\newfile.txt"){ del "$path\\newfile.txt" }\n\n$fsw = [System.IO.FileSystemWatcher] $path\n\nRegister-ObjectEvent -InputObject $fsw \xe2\x80\x93EventName Created -SourceIdentifier DDFileCreated -Action { \n $name = $Event.SourceEventArgs.Name # put breakpoint here, via ISE or script\n $changeType = $Event.SourceEventArgs.ChangeType \n $timeStamp = $Event.TimeGenerated \n Write-Host "The file \'$name\' was $changeType at $timeStamp" -fore green \n}\n\n\'foo\' | out-file "$path\\newfile.txt" # breakpoint hit\nRun Code Online (Sandbox Code Playgroud)\n\n但是,如果您只是连接事件并等待某个外部进程创建文件,我就会看到您遇到的问题。
\n\n因此,如果您可以添加一些测试代码来直接触发您的事件,那就这样做吧。
\n\n如果没有,请继续阅读...
\n\n当 shell 或 ISE等待新命令时,您似乎无法进入调试器,只能在执行另一个命令时进入。
\n\n根据该理论,这就是解决方法(对我有用):
\n\n维奥拉,断点命中!
\n| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |