1

我正在创建一个快速的临时修复,如果这很脏,我很抱歉,但是-

客观的

我想使用 Powershells Register-Event cmd 来等待文件夹中的文件,然后调用解析文件并将其输出到 excel 的函数。我不需要编码方面的帮助,只需要概念。这个事件在哪里运行以及它必须使用哪些资源对我来说仍然有点神秘。

我尝试过的事情

  1. 一个 .ps1 文件,底部有注册事件,顶部调用一个函数,由批处理文件调用。
    行为:在此行停止:

    $sr = new-object System.IO.StreamReader($copyPath)
    

    这是我第一次调用 .NET,所以这就是为什么我假设这是 .NET 的问题。

  2. 两个 .ps1 文件,FileWatcher 和 Parser,在单独运行时都很好用,由批处理文件调用。
    行为: FileWatcher 输出“此行”但无法在 Parser 中输出任何行,并且永远不会到达该行。

    Register-ObjectEvent $fsw Changed -SourceIdentifier FileChange -Action {
      Write-Host "This Line"
      .\src\Parser.ps1
      Write-host "That Line"
    }
    
  3. 我什至绝望地访问了两个 ps1 文件和两个批处理文件。只能说没用。

我正在使用的通用批处理文件命令:

powershell.exe -noexit C:\scripts\src\FileWatcher.ps1

问题

为什么某些命令在从注册事件调用时运行良好,而其他命令(如 .NET)则不起作用?

我正在努力实现的目标是可能的吗?

你有更好的方法来实现我的目标吗?(仅限脚本,记住这是一个修补程序)。

4

1 回答 1

3

以下对我有用(代码主要从这里复制):

$folder = 'c:\Temp'
$filter = '*.*'

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

Register-ObjectEvent $monitor Created -SourceIdentifier FileCreated -Action {
  $name = $Event.SourceEventArgs.FullPath
  $sr = New-Object System.IO.StreamReader($name)
  Write-Host $sr.ReadToEnd()
  $sr.Close()
}
于 2013-06-25T17:40:29.920 回答