Запустить скрипт в большинстве случаев поможет планировщик задач (Task Scheduler). Но предположим, у нас есть PowerShell скрипт, который работает в вечном цикле и/или реагирует на изменения системы в реальном времени. Такая ситуация сложилась со мной сегодня ночью, когда я писал скрипт обновления Secondary DNS на Bind9 из MS DNS.
Чтобы следить за изменениями, как и в обычном C# следует использовать FileWatcher. Вот такой простой скрипт следит за моей пользовательской папкой в вечном цикле:
$localPath = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent #Set-ExecutionPolicy Unrestricted $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = get-location $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $false $watcher.NotifyFilter = [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::FileName while($TRUE){ $result = $watcher.WaitForChanged([System.IO.WatcherChangeTypes]::All, 1000); #http://msdn.microsoft.com/en-us/library/t6xf43e0.aspx WatcherChangeTypes #[System.IO.WatcherChangeTypes]::Changed -bor [System.IO.WatcherChangeTypes]::Deleted -bor [System.IO.WatcherChangeTypes]::Renamed -bOr [System.IO.WatcherChangeTypes]::Created, 1000); if($result.TimedOut){ continue; } #Change in + AppData\Roaming\Skype\ousanov\main.db-journal write-host "Change in " + $result.Name . $localPath\yo.ps1 }
Теперь, осталось установить скрипт для работы в качестве службы. Для этого понадобится пара утилит из Windows Server Resource Kit Tools 2003 и права администратора для изменений в реестре. Не торопитесь качать весь пакет, все нужные утилиты я заботливо положил в один архив. В принципе, он содержит все что описано в помощи от MS. Только разнесен по файлам. Так, например Install.bat содержит все что надо для установки сервиса и запуска обновления реестра из файла export.reg. В итоге, установка сводится к изменению путей и названий. Разрешение проблем: Перед тем как ставить службу, вы, возможно, захотите проверить работоспособность. Для этого нужно установить svrany но не импортировать reg файл. В свойствах сервиса можно прописать начальные параметры например: c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit C:\_shared\powerShell\filewatch\filewatch.ps1 или c:\\windows\\system32\\cmd.exe /k. В моем случае я получил старый добрый «execution of scripts is disbled on this system», лечится с помощью «set-executionpolicy unrestricted».
Метки:Windows
Похожие статьи
- Нет похожих статей.
8 июня, 2015 at 12:56
Что-то не хочет «один архив» скачиваться.