【问题标题】:How to run an Event (FileSystemWatcher) through Task Scheduler如何通过任务计划程序运行事件(FileSystemWatcher)
【发布时间】:2016-11-29 03:26:58
【问题描述】:

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

我可以在我的 2012 Windows Server 上从 Administrator Powershell 运行此脚本而不会出现问题,但是当我从 Task Scheduler 运行我的脚本时,它似乎遇到了问题。

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

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

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa

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

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

补充说明:

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

【问题讨论】:

  • 如果您告诉我们这些问题是什么,我们或许可以提供帮助。如前所述,您的问题属于Super User
  • 抱歉,社区新手。希望我的编辑澄清!
  • -NoExit 是必需的,无论用户是否登录 - 事件注册仅在该会话中持续存在,因此如果进程退出,FileSystemWatcher 也会终止
  • 我将查看文件服务器资源管理器,感谢您的建议 - 如果它能够在文件创建时运行带有参数的可执行文件,那可能是一个可行的替代方案。

标签: powershell scheduled-tasks filesystemwatcher windows-server-2012-r2 powershell-4.0


【解决方案1】:

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

\serverName\FTP\Folder\script.ps1

使用

. \serverName\FTP\Folder\script.ps1

(注意.)。

【讨论】:

    【解决方案2】:

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

    我只是让我的脚本永远休眠并且它可以工作。在我的脚本末尾,它有

    while ($true) {睡眠 1}

    增加睡眠时间可能不会有什么坏处,但这很管用。

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      相关资源
      最近更新 更多