繁体   English   中英

PowerShell 脚本 - 提取、复制和删除 zip 文件不起作用

[英]PowerShell script - Extract, Copy and delete zip file not working

我已经构建了一个 Power Shell 脚本,它应该执行以下操作

  1. 如果不存在,则创建 java 版本目录
  2. 从内网下载文本文件
  3. 从下载的文本文件中检查 java 版本
  4. 如果版本不一样在线下载java zip文件
  5. 解压 java zip 文件
  6. 将 JDK zip 文件复制到 C:\\Program Files\\Java
  7. 解压后删除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

我的问题是:

  1. 当 java 版本与上面的脚本相同时,脚本正在下载我不想要的 java zip 文件!

目的是检查版本是否相同,如果不是,则显示“相同版本”,下载 zip 文件

  1. 当版本不同时,它不会解压缩 zip 文件,不会复制文件也不会删除它。

我完全不知道如何解决上述问题。

如果它正在下载,则验证未按预期运行。

如您所见,我做了一些更改,一些语法修正等。

然而,当然,我无法对此进行测试,因为我不知道您的 $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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM