我正在创建一个快速的临时修复程序,如果这很脏,请对不起,但是 -
目标
我想使用Powershells Register-Event cmd等待文件夹中丢弃的文件,然后调用解析文件并将其输出到excel的函数。我不需要编码方面的帮助,只需要概念。对于我来说,这个事件的运行位置以及它必须使用的资源仍然有点神秘。
我尝试过的事情
一个.ps1文件,底部注册了事件,调用顶部的函数,由批处理文件调用。
行为:停在这一行:
$sr = new-object System.IO.StreamReader($copyPath)
这是我第一次调用.NET,所以这就是为什么我认为这是.NET的一个问题。
两个.ps1文件,FileWatcher和Parser,在单独运行时效果很好,由批处理文件调用。
行为: FileWatcher输出“This Line”但未能在Parser中输出任何行,并且永远不会到达该行。
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChange -Action {
Write-Host "This Line"
.\src\Parser.ps1
Write-host "That Line"
}
我甚至非常绝望地去了两个ps1文件和两个批处理文件。让我们说它不起作用。
我正在使用的通用批处理文件命令:
powershell.exe -noexit C:\scripts\src\FileWatcher.ps1
问题
为什么某些命令在从已注册的事件调用时运行正常,而其他命令如.NET不起作用?
我想要实现的是什么?
你有更好的方法来实现我的目标吗? (仅限脚本,请记住这是一个修补程序)。
答案 0 :(得分:3)
以下对我有用(代码主要是从here复制的):
$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()
}