以下是我的配置示例,安装工作正常,但如果我更换' \\ BuildMachine \ Output \ MyService.exe'使用较新版本的DSC因文件使用错误而失败。使用DSC升级Windows服务的正确方法是什么?感谢。
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'
}
}
}
答案 0 :(得分:2)
我还没有找到完成此操作的内置方法,但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
}
}
答案 1 :(得分:1)
开源PowerShell模块Carbon为此目的提供了自定义DSC资源:http://get-carbon.org/Carbon_Service.html
答案 2 :(得分:0)
这不是一个理想状态,它是两个理想状态。
第一个期望的状态是:服务已正确关闭并准备好进行维护。
第二个所需状态是:该服务处于活动状态并使用最新版本的代码运行。
将其写为两个脚本。