如何通过任务计划程序运行事件(FileSystemWatcher)

问题描述 投票:0回答:3

我目前有一个非常简单的 Powershell 脚本,它创建一个 IO.FileSystemWatcher 对象,并在触发该事件时调用可执行文件。

我可以在 2012 Windows Server 上通过管理员 Powershell 运行此脚本,不会出现任何问题,但是当我从 Task Scheduler 运行脚本时,似乎会遇到问题。

我尝试在登录时运行任务,并在注销时触发触发器,在这两种情况下,当我检查时,事件状态都显示为:“正在运行”。然而,与应该监视的文件夹交互不会产生任何结果。我添加了一个日志文件来记录代码的哪些部分正在运行,并且脚本确实创建了事件,但是事件触发似乎是问题所在。有人听说过通过任务计划程序创建事件的问题吗?

我读过一些论坛,说这可能是域用户问题

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa

将 ValueName 为“disabledomaincreds”的“REG_DWORD”更改为“0”

虽然情况已经如此,但我已经根据 Scripting GuySpiceWorks 在任务属性中尝试了多种设置变体。我发现的普遍共识是,它需要使用 -NoExit 参数运行,以便在用户未登录时正确运行事件。

补充说明:

  • Powershell 脚本位于网络位置而不是物理上的计算机上 (\serverName\FTP\Folder\script.ps1
powershell scheduled-tasks filesystemwatcher windows-server-2012-r2 powershell-4.0
3个回答
0
投票

我也遇到了同样的问题。我不知道为什么这有效,但是在您的计划任务中,当引用 PowerShell 脚本时,而不是使用

\serverName\FTP\Folder\script.ps1

使用

. \serverName\FTP\Folder\script.ps1

(注意

.
)。


0
投票

据我了解,作为一个 powershell 新手,您向 FileSystemWatcher 注册的事件只有在 powershell 实例仍在运行时才会触发。我不相信任务管理器说任务正在运行,因为它是出了名的不可靠,这似乎是微软的标准。我认为一旦你的脚本完成执行,它就会杀死 powershell 实例,并且所有事件侦听器都会被垃圾收集。

我只是让我的脚本永远处于休眠状态,它就可以工作了。在我的脚本的末尾,它有

while ($true) {睡眠 1}

增加睡眠时间可能不会有什么坏处,但这确实有效。


0
投票

我猜有人设置了 Set-ExecutionPolicy RemoteSigned

我的猜测是您正在编写自己的 Powershell 脚本,这意味着它们没有远程签名。所以它不需要远程签名..

本地签名?我不知道该怎么做。

© www.soinside.com 2019 - 2024. All rights reserved.