Powershell DSC安装Java
豆子需要在一些服务器上安装Java服务并保证更新版本。之前都是手动定期检查,现在考虑能否自动化一下这个流程。豆子考虑了Powershell 的Invoke-commnad,Powershell DSC或者GPO来实现。GPO用过很多次了,这里就不尝试了。
首先我试了试invoke-command的命令。这个思路很简单,远程直接执行exe文件就行了。刚开始没反应,后来发现必须以管理员身份执行才可以。注意invoke-command里面不可以访问网络资源,因此我首先需要拷贝到本地路径才行。
out-null是为了保证该复制命令完成才执行下一条; -verb runas 表示以管理员身份执行;-passthrough 是显示后台进程
1
2
3
|
new-item \\sydittest\temp\jre8.exe -force
copy-item C:\test\jre8.exe \\sydittest\c$\temp\jre8.exe | out-null
invoke-Command -ComputerName sydittest -ScriptBlock { Start-Process -filepath "c:\temp\jre8.exe" -argumentlist "/s /L c:\temp\install.txt" -Verb runas -PassThru -Wait }
|
成功!
第二种方式我尝试了PowerShell DSC的push模式。
最初我打算直接使用EXE文件,但是没反应,整个推送LCM就卡死了,状态显示正在更新~~
我估计这货不认EXE,于是把MSI从EXE文件里面给解压出来。解压方式很简单,直接点安装,他会自动解压出对应的MSI文件。Java的MSI文件不齐全,如果需要的话,还需要用Orca之类的MSI工具添加属性,这里我只是验证一下思路,就不去补齐属性了。用过GPO配置MSI文件的话,对于Orca应该很熟悉。
自动解压出来的MSI文件。
Okay,现在来配置一下DSC。
首先把客户端配置成Push模式,推送配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[DSCLocalConfigurationManager()] Configuration LCM_Push { Node sydittest { Settings { AllowModuleOverwrite = $True
ConfigurationMode = 'ApplyAndAutoCorrect'
RefreshMode = 'Push'
} } } LCM_Push -instancename sydittest -OutputPath C:\DSC\Mod5Config Set-DSCLocalConfigurationManager -ComputerName sydittest -Path c:\DSC\mod5Config –Verbose
Get-DscLocalConfigurationManager -CimSession sydittest
|
确认模式配置成功
然后看具体的资源配置
首先复制一个MSI文件到客户端,然后安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
configuration Testmsi { Node sydittest {
File MSIFile {
Ensure = "Present" Type = "Directory“ # Default is “File”
Force = $True
Recurse = $True
SourcePath = '\\sydit01\test2'
DestinationPath = 'C:\Downloads' # On Sydittest
}
Package InstallJava {
Ensure = " Present "
Name='Java 8 Update 71 (64-bit)'
path='c:\downloads\jre1.8.0_71.msi'
productid=" 26A24AE4-039D-4CA4-87B4-2F86418071F0"
dependson= '[file]msifile'
}
}
} Testmsi -OutputPath c:\temp\nscpconfig Start-DscConfiguration -computername sydittest -Path c:\temp\nscpConfig -Wait -Verbose -force
|
效果如下
成功安装!
配合豆子之前写过的程序 (http://beanxyz.blog.51cto.com/5570417/1695998),可以查看指定软件在不同机器上的安装版本编号,我可以完全用脚本来实现Java的版本比较,卸载和更新了。