Картинка блога

Запустить скрипт в большинстве случаев поможет планировщик задач (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».

Метки:

Похожие статьи

    Нет похожих статей.

Один комментарий в “Запускаем Powershell скрипт как службу”

  1. Что-то не хочет «один архив» скачиваться.