Как обновить службу Windows, используя PowerShell Desired State Configuration
Ниже приведен пример моей конфигурации, установка работает нормально, но если я заменим "\\BuildMachine\Output\MyService.exe" на более новую версию, DSC завершится с ошибкой при использовании файла. Как правильно обновить службу Windows с помощью DSC? Благодарю.
Configuration ServiceTestConfiguration {
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xPSDesiredStateConfiguration
Node localhost
{
File EnsureLatestServiceExist {
Ensure = 'Present'
Type = 'File'
Checksum = 'ModifiedDate'
SourcePath = '\\BuildMachine\Output\MyService.exe'
DestinationPath = 'c:\MyService\MyService.exe'
}
xService EnsureServiceStarted {
Ensure = 'Present'
DependsOn = '[File]EnsureLatestServiceExist'
Name = 'MyService'
DisplayName = 'My Service'
Description = 'My Service'
Path = 'c:\MyService\MyService.exe'
StartupType = 'Automatic'
State = 'Running'
}
}
}
3 ответа
Я не нашел встроенного метода для достижения этой цели, но ресурс Script позволяет вам делать что угодно.
Добавьте ресурс Script, который проверяет, был ли удаленный (исходный) файл обновлен. Если удаленный файл был обновлен, остановите службу. Сделайте ресурс File зависимым от ресурса Script, чтобы он выполнялся перед копированием файла. Сервисный ресурс запустится последним и снова запустит сервис.
Script StopServiceCheck
{
SetScript =
{
Stop-Service -Name ServiceName -Force
}
TestScript =
{
$LocalFile = "C:\Path\To\Local.exe"
$RemoteFile = "\\Path\To\Remote.exe"
#Returns false if the remote file is newer than the local file or use -eq
return ((Get-Item -Path $RemoteFile).LastWriteTime -le (Get-Item -Path $LocalFile).LastWriteTime)
}
GetScript =
{
$LocalFile = "C:\Path\To\Local.exe"
$RemoteFile = "\\Path\To\Remote.exe"
$return = @{Result = "Executables match"}
If ((Get-Item -Path $RemoteFile).LastWriteTime -gt (Get-Item -Path $LocalFile).LastWriteTime) { $return.Result = "Remote file is newer" }
return $return
}
}
Для этой цели модуль PowerShell с открытым исходным кодом Carbon имеет собственный ресурс DSC: http://get-carbon.org/Carbon_Service.html
Это не одно желаемое состояние, это два желаемых состояния.
Первое желаемое состояние: служба надлежащим образом закрыта и готова к обслуживанию.
Второе желаемое состояние: служба активна и работает с использованием последней версии кода.
Напишите это как два сценария.