Файловый монитор PowerShell при запуске Windows

#events #powershell #monitoring

#Мероприятия #powershell #мониторинг

Вопрос:

У меня есть скрипт PowerShell для мониторинга файловой системы, использующий System.IO.FileSystemWatcher события. Сценарий отлично работает, но для этого требуется открытое окно PowerShell.

Таким образом, мне нужно запустить его как службу Windows при запуске Windows (без входа в систему). Есть ли способ сделать это?

Ответ №1:

Чтобы выполнить ваш скрипт при запуске Windows (без входа в систему), вы могли бы создать для него службу Windows (используя srvany.exe ). Шаги:

  1. Получите набор ресурсов Windows 2003 (который содержит srvany.exe )
  2. Установите набор ресурсов
  3. Создайте службу с помощью sc и srvany.exe

     sc create PSService binPath= "C:Program FilesWindows Resource KitsToolssrvany.exe" DisplayName= "PSService"
      
  4. Параметризуйте свой сервис

     Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesPSService]
    "Type"=dword:00000010
    "Start"=dword:00000003
    "ErrorControl"=dword:00000001
    "DisplayName"="PSService"
    "ObjectName"="LocalSystem"
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesPSServiceParameters]
    "Application"="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noExit -ExecutionPolicy RemoteSigned -File C:\PSService\psservice.ps1"
      

Некоторые замечания:

  • Srvany.exe недоступен для Windows Vista и более поздних версий. Это может сработать, но, вероятно, не поддерживается
  • Возможно, вы захотите запустить его с другими учетными данными (по соображениям безопасности)
  • Возможно, вы захотите сохранить свой скрипт в каталоге, доступ на запись в который имеют только администраторы (по соображениям безопасности)

Комментарии:

1. Спасибо за ваш ответ. Но это не решит мою проблему. Теперь мониторинг запущен в открытом окне PS $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = $searchPath $watcher.EnableRaisingEvents = $true $changed = Register-ObjectEvent $watcher "Changed" -Action {....} Ваше решение просто выполнить код PS, он не будет отслеживать FS.

2. @Misko Вам следует добавить параметр -NoExit при запуске powershell, чтобы избежать завершения процесса powershell после запуска сценария. Я изменил файл .reg в своем ответе.