You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell文件夹监控脚本调用mongoimport失效问题排查

嘿,我瞅了下你的脚本,问题确实出在Invoke-Command的用法上,还有mongoimport的参数格式也有问题。下面是修正后的完整脚本,我给你拆解下关键的修改点:

修正后的PowerShell监控导入脚本

1. 监控文件夹配置(微调,增加写入完成检测)

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\git\DataChain\UploadStation\to"
$watcher.Filter = "*.json"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
# 增加这个配置,确保只在文件名称确定、写入完成时触发事件
$watcher.NotifyFilter = [System.IO.NotifyFilters]::FileName -bor [System.IO.NotifyFilters]::LastWrite

2. 定义事件触发动作(核心修正)

$action = {
    $path = $Event.SourceEventArgs.FullPath
    # 加个短延迟,避免文件还没写完就开始导入(FileSystemWatcher有时会提前触发)
    Start-Sleep -Milliseconds 500
    
    # 直接调用mongoimport,这是本地运行外部程序的正确方式,不用Invoke-Command
    & "C:\Program Files\MongoDB\Server\3.4\bin\mongoimport.exe" `
        --db myDB `
        --collection jsonFiles `
        --type json `
        --file $path
    
    # 可选:输出导入结果,方便排查问题
    if ($LASTEXITCODE -eq 0) {
        Write-Host "✅ 成功导入文件: $path"
    } else {
        Write-Host "❌ 导入文件失败: $path,错误码: $LASTEXITCODE"
    }
}

3. 注册监控事件并保持运行

Register-ObjectEvent $watcher "Created" -Action $action | Out-Null
Write-Host "开始监控文件夹: $($watcher.Path)"
while ($true) {Start-Sleep 5}

关键修改说明:

  1. 换掉Invoke-Command:这个cmdlet是用来远程执行命令的,本地运行exe完全没必要用它。用&操作符直接调用程序才是本地执行外部命令的正确姿势。
  2. 修正mongoimport参数格式:你原来的参数写法不对,mongoimport需要用--db、--collection这种带双短横线的参数名,而且要把每个参数拆成单独的字符串(PowerShell会自动处理路径里的空格)。
  3. 增加文件写入等待:FileSystemWatcher的Created事件经常会在文件还没完全写入磁盘时就触发,加个500毫秒的延迟能避免导入不完整的JSON文件。
  4. 添加结果反馈:通过$LASTEXITCODE可以判断mongoimport是否执行成功,方便你排查导入失败的情况。

内容的提问来源于stack exchange,提问作者m.alsioufi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:17:28