豆子需要在一些服务器上安装Java服务并保证更新版本。之前都是手动定期检查,现在考虑能否自动化一下这个流程。豆子考虑了Powershell 的Invoke-commnad,Powershell DSC或者GPO来实现。GPO用过很多次了,这里就不尝试了。


首先我试了试invoke-command的命令。这个思路很简单,远程直接执行exe文件就行了。刚开始没反应,后来发现必须以管理员身份执行才可以。注意invoke-command里面不可以访问网络资源,因此我首先需要拷贝到本地路径才行。


out-null是为了保证该复制命令完成才执行下一条; -verb runas 表示以管理员身份执行;-passthrough 是显示后台进程

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应该很熟悉。


Powershell DSC安装Java_第1张图片


自动解压出来的MSI文件。

Powershell DSC安装Java_第2张图片


Okay,现在来配置一下DSC。

首先把客户端配置成Push模式,推送配置文件

[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


确认模式配置成功

Powershell DSC安装Java_第3张图片


然后看具体的资源配置


首先复制一个MSI文件到客户端,然后安装

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


效果如下


Powershell DSC安装Java_第4张图片


成功安装!



配合豆子之前写过的程序 (http://beanxyz.blog.51cto.com/5570417/1695998),可以查看指定软件在不同机器上的安装版本编号,我可以完全用脚本来实现Java的版本比较,卸载和更新了。

Powershell DSC安装Java_第5张图片