首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Powershell自动化Java安装

通过Powershell自动化Java安装
EN

Stack Overflow用户
提问于 2015-07-17 15:04:38
回答 2查看 2.1K关注 0票数 0

我编写了一个PowerShell脚本来检查Java,如果它不在那里,它将为它运行安装程序,但出于某种原因,尽管它检测到指定的Java,但它仍然运行安装程序。

代码语言:javascript
复制
$java = Get-WmiObject -Class win32_product |
        where {$_.Name -like "*Java 7 Update 80*"}
If ($java -eq 'Java 7 Update 80') {
  "your java version is acceptable"
  Exit
} ElseIf ($java -ne 'Java 7 Update 80') {
  Start-Process -filepat C:\jre1.7.0_80.msi /passive
  "You don't have the right version of Java, installing Java 7 Update 80"
}
Write-Host "End"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-17 15:55:01

您可以使用-like "*Java 7 Update 80*"进行筛选,这不仅仅是Java 7 Update 80 (例如Java 7 Update 80 (64-bit)),而是在决定是否启动安装程序时,检查返回的字符串是否为Java 7 Update 80

照@兰登所说的做,并在$java之前检查If的值。您很可能也有类似的东西,但不仅仅是$java中的“Java7Update80”。

为了避免这种古怪的行为,你需要保持你的条件一致。要么使用-like "*Java 7 Update 80*"无处不在,要么在任何地方使用-eq "Java 7 Update 80",但不要将它们混合在一起。

您还可以利用PowerShell 将其他类型计算为布尔值。的方式。Get-WmiObject语句生成$null (计算结果为$false)或非空字符串(计算结果为$true),因此您可以这样做以避免多次实现相同的检查:

代码语言:javascript
复制
if ($java) {
  "your java version is acceptable"
  Exit
} else {
  Start-Process -filepat C:\jre1.7.0_80.msi /passive
  "You don't have the right version of Java, installing Java 7 Update 80"
}

无论如何,您不需要elseif条件,因为您的逻辑是二进制的(不是安装了,就是没有安装)。

票数 1
EN

Stack Overflow用户

发布于 2015-07-20 17:35:55

原来$java变量是错误的,埃里克也是对的。

代码语言:javascript
复制
Start-Process powershell -Verb runAs
$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java 7 Update 71*"}
If  ($java){"your java version is acceptable"}
Else {Start-Process "C:\jre-7u71-windows-i586.exe" -Verb runAs -ArgumentList "/s" -Wait
"You don't have the right version of Java, installing Java 7 Update 71"
} 
Write-Host "Press any key to exit..."
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31478900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档