Powershell脚本Register-ObjectEvent不触发显示Not started如何修复
文件夹监控PowerShell脚本Not Started错误修复方案
错误根因
出现Not started错误的核心原因是PowerShell的垃圾回收机制自动回收了未被引用的事件订阅对象,此外还有路径权限、bat调用参数缺失的潜在问题。
修复步骤
- 为每个事件订阅添加唯一
SourceIdentifier,同时保留事件订阅的引用变量,避免被GC回收 - 配置FileSystemWatcher的
NotifyFilter参数,明确需要监听的文件变更类型,减少误触发 - 调用bat时指定工作目录参数,避免bat内的相对路径执行异常
- 添加错误捕获逻辑,方便排查执行过程中的异常
- 确保运行脚本的账户对监控目录、bat文件有读取和执行权限
修正后完整脚本
# 临时调整当前会话执行策略,允许本地脚本运行 Set-ExecutionPolicy RemoteSigned -Scope Process -Force ### 配置监控参数 $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = "C:\inetpub\wwwroot\exports\" $watcher.Filter = "*.*" $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $true # 明确监听的变更类型,避免高频无效事件 $watcher.NotifyFilter = [IO.NotifyFilters]::FileName -bor [IO.NotifyFilters]::DirectoryName -bor [IO.NotifyFilters]::LastWrite ### 事件触发后执行的动作 $action = { try { # 指定bat的工作目录,避免相对路径执行失败 Start-Process -FilePath "C:\inetpub\wwwroot\exports\services\execute.bat" ` -WorkingDirectory "C:\inetpub\wwwroot\exports\services\" ` -WindowStyle Hidden Write-Host "$(Get-Date) 事件触发,已执行execute.bat" } catch { Write-Host "$(Get-Date) 执行bat出错:$_" } } ### 注册需要监听的事件 $jobCreated = Register-ObjectEvent $watcher "Created" -SourceIdentifier "FSW_Created" -Action $action $jobChanged = Register-ObjectEvent $watcher "Changed" -SourceIdentifier "FSW_Changed" -Action $action $jobDeleted = Register-ObjectEvent $watcher "Deleted" -SourceIdentifier "FSW_Deleted" -Action $action $jobRenamed = Register-ObjectEvent $watcher "Renamed" -SourceIdentifier "FSW_Renamed" -Action $action Write-Host "文件夹监控已启动,监控路径:$($watcher.Path)" # 保持脚本运行,定期检查订阅状态 while ($true) { $allJobs = Get-Job -SourceIdentifier FSW_* foreach ($job in $allJobs) { if ($job.State -ne 'Running') { Write-Host "$(Get-Date) 事件订阅$($job.Name)状态异常:$($job.State)" } } Start-Sleep 5 }
验证方法
脚本运行后,新开PowerShell窗口执行以下命令查看订阅状态:Get-Job -SourceIdentifier FSW_*
正常状态显示为Running,如果存在异常可通过以下命令查看错误详情:Receive-Job -Id <对应Job的ID号>
注意:如需长期后台运行,建议将脚本注册为Windows计划任务,触发条件设置为系统启动,运行账户选择具备对应目录权限的管理员账户,勾选「不管用户是否登录都要运行」选项即可。
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

