PowerShell:文件系统监视程序不工作

PowerShell:文件系统监视程序不工作,powershell,filesystemwatcher,Powershell,Filesystemwatcher,代码运行时没有错误,但是当我在文件系统中添加/删除文件时,代码不会执行它在Register ObjectEvent$watcher“watchType”-action$action中应该执行的操作。我知道这一点,因为在过去,它是工作的,会创建/添加到log.txt文件删除/添加及其日期的记录。现在,什么也没发生。发生了什么事 代码: #local path of the folder you want to sync. By default sets to current directory $

代码运行时没有错误,但是当我在文件系统中添加/删除文件时,代码不会执行它在
Register ObjectEvent$watcher“watchType”-action$action
中应该执行的操作。我知道这一点,因为在过去,它是工作的,会创建/添加到
log.txt
文件删除/添加及其日期的记录。现在,什么也没发生。发生了什么事

代码:

#local path of the folder you want to sync. By default sets to current directory
$localPath = get-location

#filter specific files by name/type
$filter = "*.*"


#include subdirectories
$inclSubDirectories = $true


#end of user defined variables

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $localPath
$watcher.Filter = $filter
$watcher.IncludeSubdirectories = $inclSubDirectories
$watcher.EnableRaisingEvents = $true
$oldContent = ""

$action = {
    $path = $Event.SourceEventArgs.FullPath
    $changeType = $Event.SourceEventArgs.ChangeType

    $logline = "$(Get-Date), $changeType, $path"
    Add-content "'$localPath'\log.txt" -value $logline
}

$created = Register-ObjectEvent $watcher "Created" -Action $action

$action1 = {
    $path = $Event.SourceEventArgs.FullPath
    $changeType = $Event.SourceEventArgs.ChangeType
    $logline = "$(Get-Date), $changeType, $path"
    Add-content "'$localPath'\log.txt" -value $logline
}

$deleted = Register-ObjectEvent $watcher "Deleted" -Action $action1

$exitAction = {
    "File wathcer unregistered!"
    Unregister-Event $created
    Unregister-Event $deleted
}

$exit = Register-EngineEvent PowerShell.Exiting -action $exitAction

while ($true) {
    if($oldContent -eq $logline){}
    else{
        $logline
        $oldContent = $logline
    }
    Start-Sleep -m 1000
}
编辑

我决定尝试将代码直接复制并粘贴到PowerShell中,它的工作方式应该是。。。 不完全是这样,它不会输出,但会像应该的那样更新log.txt。 实际上,它只起过一次作用。现在又回到了以前的样子

编辑v2


当我将粘贴复制到PowerShell中时,它似乎只在每个事件中工作一次(创建,然后删除)(例如,它将在日志中注册一个已删除的文件,然后注册一个已创建的文件,但它不会执行任何其他操作。)它仍然没有像它应该的那样输出。

我可以在这里看到您的
$localpath
具有当前路径,当您添加内容时问题就出现了

在下面的一行中,路径中有一个单独的QOUTS,这是不存在的

添加内容“'$localPath'\log.txt”-值$logline

只需打印
“'$localPath'\log.txt”
即可查看

正确的表达式应该是
addcontent“$localPath\log.txt”-value$logline

在每次执行<代码>Register ObjectEvent时,都会创建一个作业,请重试

Receive Job-Id-keep
查看发生了什么

问候


kvprasoon

我认为
while($true)
循环完全阻塞了应该运行事件回调的主线程。你为什么需要它?@wOxxOm我注释掉了循环部分,脚本将关闭,因为它已到达脚本的末尾。另外,我以前在循环工作时有一个循环,所以我不认为这是问题所在。我仍然认为,如果循环中没有至少100毫秒的睡眠时间,这是错误的。@wOxxOm我添加了这个循环,但它不工作。谢谢你的帮助。我用Get-EventSubscriber代替了Receive作业,看到所有事件都已注册,但它仍然不起作用。但是,我决定尝试将代码直接复制并粘贴到PowerShell中,它的工作方式应该是。。。