<# Author: Gabe Kerntke Date: 05-02-2024 .Synopsis This script will check updates for: Chrome Firefox Edge Java JRE 64-bit and 32-bit Adobe Reader 64-bit and 32-bit Adobe Acrobat 64-bit and 32-bit 7-zip (blocked) Notepad++ (blocked) Keepass (blocked) Putty WinSCP WinZip Wireshark Zoom Cisco Webex GoToMeeting Amazon Corretto JDK VMWare Tools RingCentral msi Foxit Reader .Modified 2023-06-10 (GabeK) - Original script created #> ###################### ### Functions ### ###################### # Clear out older versions of downloads function Cleanup ($readVersion, $name) { # Set how old the file can be before getting deleted $limit = (Get-Date).AddDays(-20) # Delete files older than the $limit Get-ChildItem -Path $folderName -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit } | Remove-Item -Verbose -Force } #main function to download the program function downloadProgram ($readVersion, $version, $download, $name) { If (!(test-path -PathType container $folderName)) { New-Item -ItemType Directory -Path $folderName } If ([version]$readVersion -ne [version]$version) { Write-Host "Newer version of $folderName($version) found online!" Invoke-WebRequest "$download" -outfile "$name" Cleanup } else { Write-Host "No newer version of $folderName found." } } function Get-Chrome { #VARIABLES $initialURL = "https://versionhistory.googleapis.com/v1/chrome/platforms/win64/channels/stable/versions" $folderName = "Chrome" $filenamePrefix = "Chrome-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0.0" ############### #finds latest version from online $programVERSION = Invoke-RestMethod "$initialURL" | Select-Object -ExpandProperty versions | Select-Object -ExpandProperty version | Select-Object -First 1 $programDOWNLOAD = "https://dl.google.com/chrome/install/latest/chrome_installer.exe" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Firefox { #VARIABLES $initialURL = "https://product-details.mozilla.org/1.0/firefox_versions.json" $folderName = "Firefox" $filenamePrefix = "Firefox-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0.0" ############### #finds latest version from online $firefoxVersions = (Invoke-WebRequest -UseBasicParsing "$initialURL").Content | ConvertFrom-Json $programVersionLookup = $firefoxVersions.LATEST_FIREFOX_VERSION #more variables $programVERSION = "$programVersionLookup" $firefoxUrl = (Invoke-WebRequest -UseBasicParsing "https://download-installer.cdn.mozilla.net/pub/firefox/releases/$programVersionLookup/win64/en-US/").Links.href -like "*exe*" $programDOWNLOAD = "https://download-installer.cdn.mozilla.net$firefoxUrl" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Edge { #VARIABLES $initialURL = "https://edgeupdates.microsoft.com/api/products?view=enterprise" $folderName = "Edge" $filenamePrefix = "Edge-x64" $filenameExtension = "msi" $defaultVersion = "0.0.0.0" ############### #finds latest version from online $Program = Invoke-WebRequest -UseBasicParsing "$initialURL" | ConvertFrom-Json #more variables $programVERSION = $Program | Where-Object { $_.Product -eq "Stable" } | Select-Object -ExpandProperty Releases | Where-Object { $_.Platform -eq "Windows" -and $_.Architecture -eq "x64" } | Sort-Object -Property ProductVersion -Descending | Select-Object -First 1 | Select-Object -ExpandProperty ProductVersion $programDOWNLOAD = $Program | Where-Object { $_.Product -eq "Stable" } | Select-Object -ExpandProperty Releases | Where-Object { $_.Platform -eq "Windows" -and $_.Architecture -eq "x64" } | Sort-Object -Property ProductVersion -Descending | Select-Object -First 1 | Select-Object -ExpandProperty Artifacts | Select-Object -ExpandProperty Location #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Java64 { #VARIABLES $initialURL = "https://javadl-esd-secure.oracle.com/update/1.8.0/map-1.8.0.xml" $folderName = "Java JRE 64bit" $filenamePrefix = "jre-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #more variables $mapXML = Invoke-RestMethod "$initialURL" -UserAgent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46' #Select latest build from entries marked as 'critical' $target = ($mapXML.'java-update-map'.mapping | Where-Object { $_.critical -eq 1 } | Select-Object -Last 1) $params = @{ 'Uri' = [string]$target.url 'ContentType' = 'application/xml' 'UserAgent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46' } $javaXml = Invoke-RestMethod @params #substituting the 'au' (automatic update) value in the url with the desired architecture. $javaUpdateInfo = $javaXml.'java-update'.information $availableJreVersion = ($javaUpdateInfo | Where-Object { $_.lang -eq 'en' }).version -notmatch '^1\.0$' $javaUpdateUrl = [string]($javaUpdateInfo.url) -replace '\-au', "-x64" $programDOWNLOAD = $javaUpdateUrl #finds latest version from online $A = $javaUpdateUrl.substring(115) $B = $A.Substring(0, $A.Length - 26) $programVERSION = $B -replace ("U", ".") #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Java32 { #VARIABLES $initialURL = "https://javadl-esd-secure.oracle.com/update/1.8.0/map-1.8.0.xml" $folderName = "Java JRE 32bit" $filenamePrefix = "jre-x32" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #more variables $mapXML = Invoke-RestMethod "$initialURL" -UserAgent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46' #Select latest build from entries marked as 'critical' $target = ($mapXML.'java-update-map'.mapping | Where-Object { $_.critical -eq 1 } | Select-Object -Last 1) $params = @{ 'Uri' = [string]$target.url 'ContentType' = 'application/xml' 'UserAgent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46' } $javaXml = Invoke-RestMethod @params #substituting the 'au' (automatic update) value in the url with the desired architecture. $javaUpdateInfo = $javaXml.'java-update'.information $availableJreVersion = ($javaUpdateInfo | Where-Object { $_.lang -eq 'en' }).version -notmatch '^1\.0$' $programDOWNLOAD = [string]($javaUpdateInfo.url) -replace '\-au', "-i586" #finds latest version from online $A = $programDOWNLOAD.substring(115) $B = $A.Substring(0, $A.Length - 27) $programVERSION = $B -replace ("U", ".") #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-AdobeReader64 { #VARIABLES #$initialURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#" $folderName = "Adobe Reader update 64bit" $filenamePrefix = "Adobe-Reader-x64" $filenameExtension = "msp" $defaultVersion = "0.0.0.0" ############### #finds latest version from online # Define a script block that contains the Invoke-WebRequest command $scriptBlock = { (Invoke-WebRequest -UseBasicParsing -Headers @{ "accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" "accept-encoding"="gzip, deflate, br" "accept-language"="en-GB,en;q=0.9,en-US;q=0.8" } -Uri "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#").Links.outerHTML -like "*continuous/*" | Select-Object -First 2 | Select-Object -Last 1 } #(Invoke-WebRequest -UseBasicParsing -Headers @{"accept"="*/*"} "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#").Links.outerHTML -like "*continuous/*" | Select-Object -First 2 | Select-Object -Last 1 #Start a new PowerShell background job and pass the script block to it $job = Start-Job -ScriptBlock $scriptBlock #Wait for the job to complete $timeout = 30 Wait-Job $job -timeout $timeout | Out-Null #Get the output from the job and display it $output = Receive-Job $job $A = $output.Substring(125) $B = $A.Substring(0, $A.Length - 38) $Version = $B -replace "[^\d*\.?\d*$/]" , '' #Gets second half of URL of newest version $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri 'https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#').Links.href -like 'continuous/*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $output = $process.StandardOutput.ReadToEnd() $process.WaitForExit() #combines the first and second half URLs for latest version's URL $CombinedURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/$output" #gets link $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri '$CombinedURL').Links.href -like '*AcroRdrDCx64*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $programDOWNLOAD = $process.StandardOutput.ReadToEnd() $process.WaitForExit() $programVERSION = $Version #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-AdobeReader32 { #VARIABLES #$initialURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#" $folderName = "Adobe Reader update 32bit" $filenamePrefix = "Adobe-Reader-x32" $filenameExtension = "msp" $defaultVersion = "0.0.0.0" ############### #findslatest version from online # Define a script block that contains the Invoke-WebRequest command $scriptBlock = { (Invoke-WebRequest -UseBasicParsing -Headers @{ "accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" "accept-encoding"="gzip, deflate, br" "accept-language"="en-GB,en;q=0.9,en-US;q=0.8" } -Uri "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#").Links.outerHTML -like "*continuous/*" | Select-Object -First 2 | Select-Object -Last 1 } #Start a new PowerShell background job and pass the script block to it $job = Start-Job -ScriptBlock $scriptBlock #Wait for the job to complete $timeout = 30 Wait-Job $job -timeout $timeout | Out-Null #Get the output from the job and display it $output = Receive-Job $job $A = $output.Substring(125) $B = $A.Substring(0, $A.Length - 38) $Version = $B -replace "[^\d*\.?\d*$/]" , '' #Gets second half of URL of newest version $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri 'https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#').Links.href -like 'continuous/*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $output = $process.StandardOutput.ReadToEnd() $process.WaitForExit() #combines the first and second half URLs for latest version's URL $CombinedURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/$output" #gets link $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri '$CombinedURL').Links.href -like '*AcroRdrDCUpd*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $programDOWNLOAD = $process.StandardOutput.ReadToEnd() $process.WaitForExit() $programVERSION = $Version #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-AdobeAcrobat64 { #VARIABLES #$initialURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#" $folderName = "Adobe Acrobat update 64bit" $filenamePrefix = "Adobe-Acrobat-x64" $filenameExtension = "msp" $defaultVersion = "0.0.0.0" ############### #finds latest version from online # Define a script block that contains the Invoke-WebRequest command $scriptBlock = { (Invoke-WebRequest -UseBasicParsing -Headers @{ "accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" "accept-encoding"="gzip, deflate, br" "accept-language"="en-GB,en;q=0.9,en-US;q=0.8" } -Uri "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#").Links.outerHTML -like "*continuous/*" | Select-Object -First 2 | Select-Object -Last 1 } #Start a new PowerShell background job and pass the script block to it $job = Start-Job -ScriptBlock $scriptBlock #Wait for the job to complete $timeout = 30 Wait-Job $job -timeout $timeout | Out-Null #Get the output from the job and display it $output = Receive-Job $job $A = $output.Substring(125) $B = $A.Substring(0, $A.Length - 38) $Version = $B -replace "[^\d*\.?\d*$/]" , '' #Gets second half of URL of newest version $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri 'https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#').Links.href -like 'continuous/*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $output = $process.StandardOutput.ReadToEnd() $process.WaitForExit() #combines the first and second half URLs for latest version's URL $CombinedURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/$output" #gets link $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri '$CombinedURL').Links.href -like '*AcrobatDCx64*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $programDOWNLOAD = $process.StandardOutput.ReadToEnd() $process.WaitForExit() $programVERSION = $Version #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-AdobeAcrobat32 { #VARIABLES #$initialURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#" $folderName = "Adobe Acrobat update 32bit" $filenamePrefix = "Adobe-Acrobat-x32" $filenameExtension = "msp" $defaultVersion = "0.0.0.0" ############### #finds latest version from online # Define a script block that contains the Invoke-WebRequest command $scriptBlock = { (Invoke-WebRequest -UseBasicParsing -Headers @{ "accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" "accept-encoding"="gzip, deflate, br" "accept-language"="en-GB,en;q=0.9,en-US;q=0.8" } -Uri "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#").Links.outerHTML -like "*continuous/*" | Select-Object -First 2 | Select-Object -Last 1 } #Start a new PowerShell background job and pass the script block to it $job = Start-Job -ScriptBlock $scriptBlock #Wait for the job to complete $timeout = 30 Wait-Job $job -timeout $timeout | Out-Null #Get the output from the job and display it $output = Receive-Job $job $A = $output.Substring(125) $B = $A.Substring(0, $A.Length - 38) $Version = $B -replace "[^\d*\.?\d*$/]" , '' #Gets second half of URL of newest version $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri 'https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/index.html#').Links.href -like 'continuous/*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $output = $process.StandardOutput.ReadToEnd() $process.WaitForExit() #combines the first and second half URLs for latest version's URL $CombinedURL = "https://www.adobe.com/devnet-docs/acrobatetk/tools/ReleaseNotesDC/$output" #gets link $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = 'powershell.exe' $psi.Arguments = "(Invoke-WebRequest -UseBasicParsing -Headers @{ 'accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' 'accept-encoding'='gzip, deflate, br' 'accept-language'='en-GB,en;q=0.9,en-US;q=0.8' } -Uri '$CombinedURL').Links.href -like '*AcrobatDCUpd*' | Select-Object -First 1" $psi.RedirectStandardOutput = $true $psi.UseShellExecute = $false $process = [System.Diagnostics.Process]::Start($psi) $programDOWNLOAD = $process.StandardOutput.ReadToEnd() $process.WaitForExit() $programVERSION = $Version #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-7zip { #VARIABLES $initialURL = "https://www.7-zip.org/" $folderName = "7-zip" $filenamePrefix = "7zip-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #finds latest version from online $program = (Invoke-webRequest -UseBasicParsing "$initialURL").Links.href | where-object { $_.EndsWith("exe") } | Select-Object -First 1 #more variables $programVERSION = $program.substring(4, $program.Length - 12) + ".0" $programDOWNLOAD = $initialURL + $program #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Notepad++ { #VARIABLES $initialURL = "https://notepad-plus-plus.org/downloads/" $folderName = "notepad++" $filenamePrefix = "npp-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #finds latest version from online $program = (Invoke-webRequest "$initialURL").Links.href | Where-Object { $_.ToLower().StartsWith("https") } | Select-Object -First 1 $Version = (Invoke-WebRequest "$program").Links.href | Where-Object { $_.EndsWith("exe") } | Select-Object -First 1 #more variables $A = $Version.Substring(58) $B = $A.Substring(0, $A.Length - 25) $programVERSION = $B -replace "[^\d*\.?/\d*]" , '' -replace "/" , '' $programDOWNLOAD = $programVersionLookup #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Keepass { #VARIABLES $initialURL = "https://keepass.info/download.html" $folderName = "keepass" $filenamePrefix = "Keepass-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #finds latest version from online $program = (Invoke-webRequest -UseBasicParsing "$initialURL").Links.href -like "*exe*" | Select-Object -First 1 #more variables $str = $program $start = 61 $len = 4 $programVERSION = $str.Substring($start, [Math]::Min(($str.Length - $start), $len)) #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $programREAD = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | Sort-Object LastWriteTimeUtc -Descending | Select-Object -First 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } #calling to download function above to download program downloadKeepass $programREADVERSION $programVERSION $programFILENAME } function downloadKeepass ($readVersion, $version, $name) { If (!(test-path -PathType container $folderName)) { New-Item -ItemType Directory -Path $folderName } If ($readVersion -lt $version) { Write-Host "Newer version of $folderName($version) found online!" Invoke-WebRequest -UserAgent "Wget" -Uri "https://sourceforge.net/projects/keepass/files/latest/download" -outfile "$name" Cleanup } else { Write-Host "No newer version of $folderName found." } } function Get-Putty { #VARIABLES $initialURL = "https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html" $folderName = "Putty" $filenamePrefix = "putty-x64" $filenameExtension = "msi" $defaultVersion = "0.0.0" ############### #finds latest version from online $program = (Invoke-webRequest -UseBasicParsing "$initialURL").Links.href | Where-Object { $_.ToLower().StartsWith("https") } | Where-Object { $_.EndsWith("msi") } | Select-Object -First 1 $A = $program.Substring(58) $B = $A.Substring(0, $A.Length - 5) $programVERSION = $B -replace "[^\d*\.?\d*$/]" , '' $programDOWNLOAD = $program #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-WinSCP { #VARIABLES $initialURL = "https://winscp.net/eng/download.php" $folderName = "WinSCP" $filenamePrefix = "winscp-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #finds latest version from online $program = (Invoke-webRequest -UseBasicParsing "$initialURL").Links.href | Where-Object { $_ -like ("*exe*") } | Select-Object -First 1 $A = $program.Substring(10) $B = $A.Substring(0, $A.Length - 10) $programVERSION = $B -replace "[^\d*\.?\d*$/]" , '' | ForEach-Object { $_.Substring(0, $_.length - 1) } $programDOWNLOAD = (Invoke-WebRequest -UseBasicParsing "https://winscp.net$program").Links.href -like "*Setup.exe*" | Select-Object -First 1 #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-WinZip { #VARIABLES $initialURL = "https://www.winzip.com/en/download/winzip/" $folderName = "WinZip" $filenamePrefix = "winzip-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #finds latest version from online $program = (Invoke-webRequest -UseBasicParsing "$initialURL").Links.href -like "*exe*" | Select-Object -First 1 $A = $program.Substring(25) $B = $A.Substring(0, $A.Length - 4) $C = $B -replace "[^\d*\.?/\d*]" , '' -replace "/" , '' $programVERSION = $C + ".0" $programDOWNLOAD = "$program" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Wireshark { #VARIABLES $initialURL = "https://www.wireshark.org/download.html" $folderName = "Wireshark" $filenamePrefix = "wireshark-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #finds latest version from online $program = (Invoke-webRequest -UseBasicParsing "$initialURL").Links.href -like "*exe*" | Select-Object -First 1 $A = $program.Substring(35) -replace "[^\d*\.?/\d*]", '' -replace "/" , '' $programVERSION = $A.Substring(0, $A.Length - 1) $programDOWNLOAD = "$program" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Zoom { #VARIABLES $initialURL = "https://zoom.us/rest/download?os=win" $folderName = "Zoom" $filenamePrefix = "zoom-x64" $filenameExtension = "msi" $defaultVersion = "0.0.0.0" ############### #finds latest version from online $programVERSION = (Invoke-RestMethod "$initialURL").result.downloadVO.zoomX64.version $programDOWNLOAD = "https://zoom.us/client/latest/ZoomInstallerFull.msi?archType=x64" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-ZoomPlugin { #VARIABLES $initialURL = "https://zoom.us/rest/download?os=win" $folderName = "Zoom plugin" $filenamePrefix = "zoom-plugin" $filenameExtension = "msi" $defaultVersion = "0.0.0" ############### #finds latest version from online $programVERSION = (Invoke-RestMethod "$initialURL").result.downloadVO.outlookPlugin.version $programDOWNLOAD = "https://zoom.us/client/latest/ZoomOutlookPluginSetup.msi" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-AmazonCorretto { #VARIABLES $initialURL = "https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html" $folderName = "Amazon Corretto JDK" $filenamePrefix = "Corretto-JDK-x32" $filenameExtension = "msi" $defaultVersion = "0.0.0.0" ############### #finds latest version from online $Program = (Invoke-WebRequest -UseBasicParsing "$initialURL").Links.href -like "*msi*" -like "*jdk*" -like "*x86*" | Select-Object -First 1 $request = [System.Net.WebRequest]::Create($Program) $request.AllowAutoRedirect = $false $response = $request.GetResponse() $Version = If ($response.StatusCode -eq "Found") { $response.GetResponseHeader("Location") } #more variables $programVERSION = $Version.split("/") | Select-Object -First 4 | Select-Object -Last 1 $programDOWNLOAD = $Program #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Webex { #VARIABLES $initialURL = "https://help.webex.com/en-us/article/mqkve8/Webex-App-%7C-Release-notes" $folderName = "Webex" $filenamePrefix = "webex-x64" $filenameExtension = "msi" $defaultVersion = "0.0.0" ############### #finds latest version from online #$program = (Invoke-WebRequest -UseBasicParsing $initialURL).Links.outerHTML | Where-Object { $_.outerHTML -like '*app versions*' } | Select-Object -ExpandProperty outerHTML | Select-Object -First 1 #Download the HTML content $html = (New-Object System.Net.WebClient).DownloadString($initialURL) # Split the content on ">" and "<" characters to extract the text content $text = $html.Split([char[]]@(">", "<"), [StringSplitOptions]::RemoveEmptyEntries) | Select-Object -First 700 $Text2 = $text -like "Windows*" # Find the start and end index of the table #$startIndex = $text.IndexOf("Bug search tool") #$endIndex = $text.IndexOf("The bugs that are listed in the following table describe resolved issues in these releases.") # Extract the table rows #$rows = $text[$startIndex..$endIndex] -like "*Windows*" # Filter out only the rows containing version numbers $Versions = $Text2 | Where-Object { $_ -match "\d+\.\d+\.\d+" } | ForEach-Object { $_ -replace " ", "" } #$Version = $program.Substring(75) $programVERSION = $Versions -replace "[^\d*\.?/\d*]" , '' -replace "/" , '' $programDOWNLOAD = "https://binaries.webex.com/WebexTeamsDesktop-Windows-Gold/Webex_en.msi" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-GoToMeeting { #VARIABLES $initialURL = "https://link.gotomeeting.com/latest-msi" $folderName = "GoToMeeting" $filenamePrefix = "gotomeeting-x64" $filenameExtension = "msi" $defaultVersion = "0.0.0.0" ############### #finds latest version from online $request = [System.Net.WebRequest]::Create($initialURL) $request.AllowAutoRedirect = $false $response = $request.GetResponse() $Program = $response.GetResponseHeader("Location") #more variables $A = $Program.Substring(50) $B = $A.Substring(0, $A.Length - 52) $programVERSION = $B -replace "[^\d*\.?/\d*]" , '' -replace "/" , '' $programDOWNLOAD = $initialURL #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-VMwareTools { #VARIABLES $initialURL = "https://packages.vmware.com/tools/releases/latest/windows/x64/" $folderName = "VMware Tools" $filenamePrefix = "VMwareTools-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0" ############### #finds latest version from online $Program = (Invoke-WebRequest -UseBasicParsing "$initialURL").links.href -like "*exe*" $programVERSION = $Program.split("-") | Select-Object -First 3 | Select-Object -Last 1 $programDOWNLOAD = "$initialURL" + "$Program" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-RingCentral { #VARIABLES $initialURL = "https://support.ringcentral.com/release-notes/mvp/app/desktop-webapp.html" $folderName = "RingCentral" $filenamePrefix = "RingCentral-x64" $filenameExtension = "msi" $defaultVersion = "0.0.0" ############### #finds latest version from online $html = (New-Object System.Net.WebClient).DownloadString("$initialURL") # Split the content on ">" and "<" characters to extract the text content $text = $html.Split([char[]]@(">", "<"), [StringSplitOptions]::RemoveEmptyEntries) $A = $text | Where-Object { $_ -like "Version*" } $programVERSION = $A -replace "[^\d*\.?/\d*]" $programDOWNLOAD = "https://app.ringcentral.com/download/RingCentral-x64.msi" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } function Get-Foxit { #VARIABLES $initialURL = "https://www.foxit.com/pdf-reader/version-history.html" $folderName = "Foxit PDF Reader" $filenamePrefix = "FoxitReader-x64" $filenameExtension = "exe" $defaultVersion = "0.0.0.0" ############### #finds latest version from online # Download the HTML content $html = (New-Object System.Net.WebClient).DownloadString("$initialURL") # Split the content on ">" and "<" characters to extract the text content $text = $html.Split([char[]]@(">", "<"), [StringSplitOptions]::RemoveEmptyEntries) $A = $text | Where-Object { $_ -like "Version*" } $programVERSION = $A -replace "[^\d*\.?/\d*]" | Select-Object -First 2 | Select-Object -Last 1 $programDOWNLOAD = "https://www.foxit.com/downloads/latest.html?product=Foxit-Reader&platform=Windows&version=&package_type=&language=English&distID=" #################################################### #verifying/comparing version already downloaded to what is online $programFILENAME = ".\$folderName\$filenamePrefix-$programVERSION.$filenameExtension" $GetVersions = Get-ChildItem ".\$folderName\" -name -ErrorAction SilentlyContinue | ForEach-Object { $_ -replace ("$filenamePrefix-", "") -replace (".$filenameExtension", "") } $programREAD = $GetVersions | Sort-Object { [version] $_ } | Select-Object -Last 1 if ($programREAD.length -eq 0) { $programREADVERSION = "$defaultVersion" } else { $programREADVERSION = $programREAD } #calling to download function above to download program downloadProgram $programREADVERSION $programVERSION $programDOWNLOAD $programFILENAME ################### } ###################### ### Script start ### ###################### #Use TLS 1.2 for communication [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # Checks if device is a Probe by looking for EPCache folder $EPCache = Test-Path "C:\Temp\Script Cache\" If ($EPCache -eq $true) { #Create 3rd Party Patches folder if doesn't exist $PatchesFolder = Test-Path "C:\Temp\Script Cache\3rd Party Patches" If ($PatchesFolder -eq $false) { New-Item -ItemType Directory -Path "C:\Temp\Script Cache\3rd Party Patches" } Set-Location "C:\Temp\Script Cache\3rd Party Patches" #Run functions Get-Chrome Get-Firefox Get-Edge Get-Java64 Get-Java32 Get-AdobeReader64 Get-AdobeReader32 Get-AdobeAcrobat64 Get-AdobeAcrobat32 Get-7zip Get-Notepad++ Keepass Get-Putty Get-WinSCP Get-WinZip Get-Wireshark Get-Zoom Get-ZoomPlugin Get-AmazonCorretto Get-Webex Get-GoToMeeting Get-VMwareTools Get-RingCentral Get-Foxit Write-Host "SCRIPT COMPLETE" } Else { Write-Host "This device does not have an EPCache folder so it must not be a Probe, exiting script" }