我有脚本监视特定目录中的文件创建。
我在创建 System.IO.FileSystemWatcher 后使用 Register-ObjectEvent,
它工作得很好,但如果我在 -Action 代码块中设置断点,IDE 会生成:
警告:不会命中“D:\My Stuff\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"
}
如果您在同一 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
但是,如果您只是连接事件并等待某个外部进程创建文件,我就会看到您遇到的问题。
因此,如果您可以添加一些测试代码来直接触发您的事件,那就这样做吧。
如果没有,请继续阅读...
当 shell 或 ISE 处于运行状态时,您似乎无法进入调试器等待新命令,您只能输入当另一个命令正在执行时.
根据该理论,这就是解决方法(对我有用):
- 设置断点
- 运行您的事件订阅代码
- 在 ISE 控制台窗口中或从 shell 中的提示符运行命令“Read-Host”
- 等到您知道您的事件应该由于外部进程而触发
- 按“Enter”以允许 Read-Host 完成
维奥拉,断点命中!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)