【问题标题】:PowerShell script - Extract, Copy and delete zip file not workingPowerShell 脚本 - 提取、复制和删除 zip 文件不起作用
【发布时间】:2020-03-16 04:06:24
【问题描述】:

我已经构建了一个 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 文件,不会复制文件,也不会删除它。

对于如何解决上述问题,我对 power shell 完全陌生。

【问题讨论】:

    标签: java powershell powershell-2.0


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多