我需要一个 FileWatcher 脚本来检测新文件,如果找到这些文件,则执行另一个 powershell 脚本。此第二个 PS 脚本的目标目录将文件输出到 UNC 挂载,该挂载目录挂载为 P: 。该 UNC 挂载实际上是来自 Linux 计算机的 SMB 共享。该 Linux 计算机托管 SMB 服务,并授予机器上的一个 Linux 用户访问权限。该 Linux 用户具有创建和修改 SMB 目录中文件的适当权限。
如果我在登录时在实时窗口中运行该脚本,我可以让文件监视脚本完美地执行操作。
在 System.IO.FileSystemWatcher 检测到新文件后,我无法让 filewatcher 脚本作为 Windows 服务运行并正确执行命令。
我使用 winsw.exe 格式创建 Windows 服务。当我以 SYSTEM 用户身份运行此服务时...什么都没有。当我以我自己的身份(在实时窗口中成功运行该服务的同一用户)运行该服务时,什么都没有。
这是 winsw.xml
<service>
<id>StartWatchingFiles</id>
<name>Start Watching Files</name>
<description>This is used to watch files.</description>
<executable>PowerShell.exe</executable>
<logmode>reset</logmode>
<arguments>-ExecutionPolicy Bypass -File "C:\scripts\StartWatching.ps1"</arguments>
</service>
运行后,将生成文件,并且观察器脚本将不会触发 PS 脚本来响应新检测到的文件。