Eu preciso de um script FileWatcher para detectar novos arquivos e executar outro script PowerShell se os arquivos forem encontrados. O diretório de destino deste script de segundo PS gera o arquivo para uma montagem UNC que possui o diretório montado como P:. Essa montagem UNC é na verdade um compartilhamento SMB de uma máquina Linux. Essa máquina Linux hospeda um serviço SMB com acesso concedido a um usuário linux na caixa. Esse usuário linux tem os direitos apropriados para criar e modificar os arquivos dentro do diretório SMB.
Eu posso fazer com que o script filewatcher execute as ações perfeitamente se eu executar o script em uma janela ativa enquanto estiver logado.
Não consigo fazer com que o script filewatcher seja executado como um serviço do windows e execute corretamente um comando depois que o System.IO.FileSystemWatcher detectar um novo arquivo.
Eu usei o formato winsw.exe para criar o serviço do Windows. Quando eu corro isso como o usuário do sistema ... nada. Quando eu executo o serviço como eu, o mesmo usuário que o executa com sucesso em uma janela ativa, nada.
Aqui está o arquivo 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>
Após a execução, os arquivos são gerados e o script do observador não dispara o script PS em resposta a esse arquivo recém-detectado.