java - PowerShell 脚本 - 提取、复制和删除 zip 文件不起作用
问题描述
我已经构建了一个 Power Shell 脚本,它应该执行以下操作
- 如果不存在则创建 java 版本目录
- 从 Intranet 下载文本文件
- 从下载的文本文件中检查 java 版本
- 如果版本不同,请在线下载 java zip 文件
- 提取java zip文件
- 将 JDK zip 文件复制到 C:\Program Files\Java
- 解压后删除zip文件
下面是我的 Power Shell 脚本
$JavaVersion = "java.version=11.0.6"
$Folder = "C:\Users\$env:UserName\test\java"
$IntranetUrl = http://10.1.48.25/test/version.txt
$IntranetTextFile = "C:\Users\$env:UserName\test\java\version.txt"
$JavaDownloadPath = http://10.1.48.25/test/install/Inst_20.05.00.01/testDesktop/OpenJDK11U-
jdk_x64_windows_hotspot_11.0.6_10.zip
$JavaZipFilePath = C:\Users\$env:UserName\test\java\openjdk-11+28_windows-x64_bin.zip
$ExpandArchivePath = "C:\Users\$env:UserName\test\java\*.zip"
$ExpandArchiveDestinationPath = "C:\Users\$env:UserName\test\java"
# create java version directory in C:\Users\$env:UserName\test\java if it does not exist
if (-not (Test-Path $Folder)) {
try {
New-Item -Path $Folder -ItemType Directory -ErrorAction Stop | Out-Null #-Force
}
catch {
Write-Error -Message "Unable to create directory "C:\Program Files\test". Error was: $_" -
ErrorAction Stop
}
}
# Download text file from intranet
Invoke-WebRequest http://10.1.48.25/test/version.txt -OutFile
"C:\Users\$env:UserName\test\java\version.txt"
# Check java version from version.txt
If (Get-Content $IntranetTextFile | %{$_ -match $JavaVersion})
{
echo Version Same
}
else
{
# Download Java file
Invoke-WebRequest $JavaDownloadPath -OutFile $JavaZipFilePath
}
#Extract the zip file in C:\Users\$env:UserName\test\java\jdk-11.0.6
if (-not (Test-Path "C:\Users\$env:UserName\test\java\jdk-11")) {
Expand-Archive "C:\Users\$env:UserName\test\java\openjdk-11+28_windows-x64_bin.zip" -DestinationPath
"C:\Users\$env:UserName\test\java"
}
# Copy the JDK zip file to C:\Program Files\Java
Copy-Item -Path .\*.zip -Destination $ExpandArchiveDestinationPath -force
#Delete the zip file after extraction
Remove-Item $JavaZipFilePath -Force
我的问题是:
- 当java版本相同时,上面的脚本正在下载我不想要的java zip文件!
目的是检查版本是否相同,如果不是,则显示“相同版本”,下载 zip 文件
- 当版本不同时,它不会提取 zip 文件,不会复制文件,也不会删除它。
对于如何解决上述问题,我对 power shell 完全陌生。
解决方案
如果它仍然在下载,则验证未按预期运行。
如您所见,我进行了一些更改,一些语法修复等。
但是,当然,我无法对此进行测试,因为我不知道您的 $IntranetTextFile 中有什么,也没有类似的环境可以检查。
$JavaVersion = 'java.version=11.0.6'
$Folder = "C:\Users\$env:UserName\test\java"
$IntranetUrl = 'http://10.1.48.25/test/version.txt'
$IntranetTextFile = "C:\Users\$env:UserName\test\java\version.txt"
$JavaDownloadPath = 'http://10.1.48.25/test/install/Inst_20.05.00.01/testDesktop/OpenJDK11U-jdk_x64_windows_hotspot_11.0.6_10.zip'
$JavaZipFilePath = "C:\Users\$env:UserName\test\java\openjdk-11+28_windows-x64_bin.zip"
$ExpandArchivePath = "C:\Users\$env:UserName\test\java\*.zip"
$ExpandArchiveDestinationPath = "C:\Users\$env:UserName\test\java"
# create java version directory in C:\Users\$env:UserName\test\java if it does not exist
if (-not (Test-Path $Folder))
{
try
{
New-Item -Path $Folder -ItemType Directory -ErrorAction Stop |
Out-Null #-Force
}
catch
{
$WriteErrorSplat = @{
Message = "Unable to create directory C:\Program Files\$Folder. Error was: $_"
ErrorAction = 'Stop'
}
Write-Error @WriteErrorSplat
}
}
# Download text file from intranet
$InvokeWebRequestSplat = @{
Uri = 'http://10.1.48.25/test/version.txt'
OutFile = "C:\Users\$env:UserName\test\java\version.txt"
}
Invoke-WebRequest @InvokeWebRequestSplat
# Check java version from version.txt
If ((Get-Content $IntranetTextFile) -match $JavaVersion)
{Write-Warning -Message 'Java Version already exits. Download not needed.'}
else {Invoke-WebRequest $JavaDownloadPath -OutFile $JavaZipFilePath}
#Extract the zip file in C:\Users\$env:UserName\test\java\jdk-11.0.6
if (-not (Test-Path "C:\Users\$env:UserName\test\java\jdk-11"))
{
$ExpandArchiveSplat = @{
Path = "C:\Users\$env:UserName\test\java\openjdk-11+28_windows-x64_bin.zip"
DestinationPath = "C:\Users\$env:UserName\test\java"
}
}
Expand-Archive @ExpandArchiveSplat
# Copy the JDK zip file to C:\Program Files\Java
Copy-Item -Path '.\*.zip' -Destination $ExpandArchiveDestinationPath -force
#Delete the zip file after extraction
Remove-Item $JavaZipFilePath -Force
推荐阅读
- mysql - 更好的排序选项以支持 MYSQL 中的所有语言
- c# - Angular DatePicker 到 C# 日期时间
- c# - 调用图形 api 失败并出现莫名其妙的日志,并且未捕获套接字异常
- c++ - 将 map 中的 unique_ptrs 推入向量时出错
- javascript - Qt5-QML:如何通过 JavaScript 处理 QML 中的组合框
- postgresql - 转置 JSONB 数组元素 - Postgres 11.5?
- python - 实现简单的静止搜索算法
- c - 栈算法去除n位数后得到最大数
- c++ - Lambda到函数指针适配器的理解
- sql-server - 在 EF Core 中使用软删除方法时如何正确实现一对一关系?