编写PowerShell脚本监控锁定文件,解锁后执行指定命令
解决方案:PowerShell持续监控锁定文件并触发网页打开
刚好碰到过类似的场景,我给你整合了一个完整的脚本,把「持续监控」和「文件锁定检查」结合起来了,直接就能用,还留了方便修改的参数:
# 配置参数 - 这里改成你的实际信息 $targetFilePath = "C:\CNC\OutputFile.txt" # CNC生成的锁定文件路径 $processingWebUrl = "http://your-intranet-site/process-file" # 处理文件的内网网页URL $checkIntervalSeconds = 5 # 每次检查的间隔时间(秒) # 检查文件是否被锁定的函数 function Test-FileLocked { param([string]$Path) try { $fileStream = [System.IO.File]::Open($Path, 'Open', 'Write', 'None') $fileStream.Close() $fileStream.Dispose() return $false # 文件未锁定 } catch { return $true # 文件被锁定 } } Write-Host "开始监控文件: $targetFilePath" -ForegroundColor Cyan # 持续监控直到文件解锁 do { if (Test-FileLocked -Path $targetFilePath) { Write-Host "文件仍处于锁定状态,$checkIntervalSeconds秒后再次检查..." -ForegroundColor Yellow Start-Sleep -Seconds $checkIntervalSeconds } } while (Test-FileLocked -Path $targetFilePath) # 文件解锁后打开处理网页 Write-Host "文件已解锁,正在打开处理网页..." -ForegroundColor Green Start-Process $processingWebUrl
关键部分解释:
- 参数配置区:最顶部的三个变量,你只需要替换成自己的文件路径、内网网页地址和检查间隔就行,不用动后面的逻辑。
- Test-FileLocked函数:核心是尝试以「写入权限」打开文件——如果CNC还锁定着文件,这个操作会抛出异常,我们就判定文件还在锁定;如果能成功打开,说明文件已经解锁了。
- 循环监控:用
do-while循环持续检查,每次检查后等待设定的间隔时间,避免频繁占用系统资源。 - 触发网页:文件解锁后,用
Start-Process直接调用系统默认浏览器打开指定的内网网页,自动触发文件处理流程。
注意事项:
- 确保运行脚本的账号有读取和写入目标文件的权限,不然可能误判锁定状态。
- 如果需要用特定浏览器打开网页,可以在
Start-Process里指定浏览器路径,比如Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe" $processingWebUrl。 - 检查间隔可以根据CNC的操作节奏调整,比如如果CNC解锁文件的时间比较固定,可以设长一点(比如10秒)减少资源消耗。
内容的提问来源于stack exchange,提问作者Mike Todd
相关产品推荐
相关产品推荐

