47<# /* * AUTHOR: TJ SIWINSKI * NAME: Cloud-Download-Ace.ps1 * * PURPOSE: * DCXADC-1618/1631 - Download Cloud OS files and execute required logic, OS dependant * * * EDITS: 01/2021 - start * *#> Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - Started Script "; #Check PowerShell Version #PowerShell 5 is minimum version which is installed on Win2012r2 as of 3/2021 if ($PSVersionTable.PSVersion.Major -lt 5) { Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - FAIL - cannot run on PowerShell Version:$($PSVersionTable.PSVersion.Major).$($PSVersionTable.PSVersion.Minor), I give up." Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - Completed Script "; Exit 0 } $baseDir="https://rax.mirror.rackspace.com/mpccloudos/" #Determine OS, note in initial release: 2012,2016 are "actionable" $OSCaption=$(Get-WmiObject win32_operatingsystem).caption $b2012=($OSCaption -match "2012") $b2016=($OSCaption -match "2016") #FileName, MD5, Directory on Target Computer,Executable, OS, Action Required $file1=("cloudos_images_1.zip","A18D533A34327D6F9A68F65DFB5C22E7","C:\rs-pkgs\Provisioning\Images","n/a","2012","unzip") $file2=("cloudos_images_2.zip","9C9076918BF6787923845B4EE7ADF663","C:\rs-pkgs\Provisioning\Images","n/a","2012","unzip") $file3=("cloudos_post.zip","0A7E23A2F519425C711F886E01C9DEAA","C:\rs-pkgs\Provisioning\Post","CloudOS_Post.exe","2012","unzip.execute") $file4=("cloudos_updates.zip","2A662EAE9CF337742568CB454C5CB3F0","C:\rs-pkgs\Provisioning\UpdateRollups","n/a","2012","unzip") $file5=("cloudos_drivers.zip","028BB2D285A9EC29EC30073756964FAC","C:\rs-pkgs\Provisioning\Drivers","MLNX_VPI_WinOF-4_95_All_win2012R2_x64.exe","2012","unzip") $file6=("cloudos_images_3.zip","DBC7F3143A5972126BE9208426B14ECD","C:\VHDXBoot","n/a","2016","unzip") #Build Collection of All Files [System.Collections.ArrayList]$FileList=@($file1,$file2,$file3,$file4,$file5,$file6) foreach($entry in $FileList) { $FileName=$entry[0] $ActualMD5=$entry[1] $FinalFilePathLocal=$entry[2] $Executable=$entry[3] $OS=$entry[4] $ActionRequired=$entry[5] if ($OSCaption -match $OS) { #Build out path variables $FilePathMirror=$baseDir+$FileName $FilePathLocal="c:\rs-pkgs\"+$FileName #Test if file already present if (Test-Path $FilePathLocal) { Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - file: $($FilePathLocal) already exists." continue } Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - Starting Download: $($FileName)"; $wc = New-Object System.Net.WebClient; [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; $wc.DownloadFile($FilePathMirror,$FilePathLocal); Start-Sleep -Seconds 10; $downloadMD5=$(Get-FileHash $FilePathLocal -Algorithm MD5).Hash if ($actualMD5 -eq $downloadMD5) { Add-Content C:\rs-pkgs\cloud_download_log.txt "MD confirmed $($FileName): $($actualMD5)" if ($ActionRequired -match "unzip") { # Expand-Archive which builds directory if DNE Expand-Archive -Path $FilePathLocal -DestinationPath $FinalFilePathLocal -Force Start-Sleep -Seconds 10 Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - extracted from: $($FilePathLocal) to: $($FinalFilePathLocal) "; # Remove zip file file which is now extraneous Remove-Item $FilePathLocal if ($ActionRequired -match "execute") { $FullExecutablePath=$FinalFilePathLocal+"\" + $Executable & $FullExecutablePath Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - executed: $($FullExecutablePath)" } } }# MD5 Signature Match Else { Add-Content C:\rs-pkgs\cloud_download_log.txt "MD check fail, expected $($FileName): $($actualMD5) file returned: $($downloadMD5)" } }# OS Caption Match }#For Each Entry Add-Content C:\rs-pkgs\cloud_download_log.txt "$(Get-Date) - Completed Script "; Exit 0