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

PowerShell中FileSystemWatcher事件动作写入日志文件失败求助

PowerShell FileSystemWatcher 日志写入失败问题解决

问题原因

Register-ObjectEvent的-Action代码块运行在独立的PowerShell运行空间中,和主脚本的作用域相互隔离,因此无法直接访问主脚本里定义的$LogFile变量,这就是日志写入失败的核心原因。

修复代码

使用$using:作用域修饰符,让Action块能够引用主运行空间中的变量,同时添加目录检查确保日志路径有效,修改后的完整代码如下:

$folder = 'D:\InputFiles\'
$filter = 'data.csv'
$LogFile = "D:\APIRead\logs\master.log"

# 确保日志目录存在,避免因目录不存在导致写入失败
if (-not (Test-Path (Split-Path $LogFile -Parent))) {
    New-Item (Split-Path $LogFile -Parent) -ItemType Directory | Out-Null
}

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $false
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}

Register-ObjectEvent $fsw Created -SourceIdentifier PaymentsMKFileCreated -Action { 
    $name = $Event.SourceEventArgs.Name 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated 
    $Output = "The file '$name' was $changeType at $timeStamp"
    Write-Host $Output
    # 使用$using:引用主作用域的LogFile变量
    Out-File -FilePath $using:LogFile -InputObject $Output -Append
    #Invoke-Item 'D:\APIRead\scripts\process.bat'
}

额外注意事项

  • 权限验证:确认运行脚本的用户对D:\APIRead\logs目录有写入权限,避免因权限不足导致日志写入被拒绝。
  • 编码一致性:如果后续需要读取日志,可在Out-File中指定-Encoding参数(如UTF8),避免编码混乱。

内容的提问来源于stack exchange,提问作者shadowfoxy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:05:25