Назад | Перейти на главную страницу

Скрипт Powershell запускает System.IO.FileSystemWatcher как службу Windows

Мне нужен сценарий FileWatcher для обнаружения новых файлов и выполнения другого сценария PowerShell, если файлы найдены. Каталог назначения этого второго сценария PS выводит файл на UNC-монтировку, в которой каталог смонтирован как P:. Это UNC-монтирование на самом деле является общим ресурсом SMB с машины Linux. На этой машине Linux размещается служба SMB, доступ которой предоставляется одному пользователю Linux. Этот пользователь Linux имеет соответствующие права на создание и изменение файлов в каталоге SMB.

Я могу заставить скрипт filewatcher отлично выполнять действия, если я запускаю скрипт в живом окне, когда я авторизован.

Я не могу заставить скрипт filewatcher работать как службу Windows и правильно выполнить команду после того, как System.IO.FileSystemWatcher обнаружит новый файл.

Я использовал формат 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 в ответ на этот вновь обнаруженный файл.