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

时间:2016-07-25 17:04:25

标签: powershell scheduled-tasks filesystemwatcher windows-server-2012-r2 powershell-v4.0

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

我可以在我的2012 Windows Server上运行此脚本而没有来自管理员Powershell的问题,但是当我从任务计划程序运行我的脚本时,它似乎遇到了问题。

我已尝试在登录时运行任务,并在我退出时触发,在两个实例中,事件状态显示为:"正在运行"当我检查。但是,与应该观看的文件夹进行交互不会产生任何结果。我已经添加了一个日志文件来记录代码的哪些部分正在运行,脚本是否创建了事件,但是事件触发似乎是问题。有没有人听说过通过任务计划程序创建事件的问题?

我已经阅读了一些说它可能是域用户问题的论坛

  

HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\ LSA

     

将ValueName'disabledomaincreds'的'REG_DWORD'更改为值“0

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

额外说明:

  • Powershell脚本位于网络位置,而不是物理上位于计算机上(\ serverName \ FTP \ Folder \ script.ps1

2 个答案:

答案 0 :(得分:0)

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

\serverName\FTP\Folder\script.ps1

使用

. \serverName\FTP\Folder\script.ps1

(注意.)。

答案 1 :(得分:0)

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

我只是将脚本永久休眠,它可以正常工作。在我的脚本结尾,它有

while($ true){sleep 1}

增加睡眠时间可能不会受到伤害,但这是可行的。