我目前有一个非常简单的 Powershell 脚本,它创建一个 IO.FileSystemWatcher 对象,并在触发该事件时调用可执行文件。
我可以在 2012 Windows Server 上通过管理员 Powershell 运行此脚本,不会出现任何问题,但是当我从 Task Scheduler 运行脚本时,似乎会遇到问题。
我尝试在登录时运行任务,并在注销时触发触发器,在这两种情况下,当我检查时,事件状态都显示为:“正在运行”。然而,与应该监视的文件夹交互不会产生任何结果。我添加了一个日志文件来记录代码的哪些部分正在运行,并且脚本确实创建了事件,但是事件触发似乎是问题所在。有人听说过通过任务计划程序创建事件的问题吗?
我读过一些论坛,说这可能是域用户问题
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa
将 ValueName 为“disabledomaincreds”的“REG_DWORD”更改为“0”
虽然情况已经如此,但我已经根据 Scripting Guy 和 SpiceWorks 在任务属性中尝试了多种设置变体。我发现的普遍共识是,它需要使用 -NoExit 参数运行,以便在用户未登录时正确运行事件。
我也遇到了同样的问题。我不知道为什么这有效,但是在您的计划任务中,当引用 PowerShell 脚本时,而不是使用
\serverName\FTP\Folder\script.ps1
使用
. \serverName\FTP\Folder\script.ps1
(注意
.
)。
据我了解,作为一个 powershell 新手,您向 FileSystemWatcher 注册的事件只有在 powershell 实例仍在运行时才会触发。我不相信任务管理器说任务正在运行,因为它是出了名的不可靠,这似乎是微软的标准。我认为一旦你的脚本完成执行,它就会杀死 powershell 实例,并且所有事件侦听器都会被垃圾收集。
我只是让我的脚本永远处于休眠状态,它就可以工作了。在我的脚本的末尾,它有
while ($true) {睡眠 1}
增加睡眠时间可能不会有什么坏处,但这确实有效。
我猜有人设置了 Set-ExecutionPolicy RemoteSigned
我的猜测是您正在编写自己的 Powershell 脚本,这意味着它们没有远程签名。所以它不需要远程签名..
本地签名?我不知道该怎么做。