diff --git a/Powershell Modules & NuGet Repo/App - VMware Tools - Upgrade.ps1 b/Powershell Modules & NuGet Repo/App - VMware Tools - Upgrade.ps1 new file mode 100644 index 0000000..2054f99 --- /dev/null +++ b/Powershell Modules & NuGet Repo/App - VMware Tools - Upgrade.ps1 @@ -0,0 +1,126 @@ +<# +Author: Gabe Kerntke +Date: 05-10-2024 + +.Synopsis +#Script to update VMware Tools on machines (mostly used for zero days) + +.Modified +2024-05-10 (GabeK) - Original script created +2025-03-26 (GabeK) - Script updated with new logic to download to probe first +2025-08-05 (GabeK) - Script updated to use functions script +2025-12-19 (GabeK) - Script updated to use new processes +2026-04-28 (GabeK) - Updated variables section to pass scriptanalyzer +2026-05-05 (GabeK) - Rewritting script to not search online for version and only check Artifactory (since servers may not have internet access) +#> + +#Region Variables +[CmdletBinding()] +Param( + [Parameter(Mandatory = $false)] + $App_Name = "VMware Tools", + [Parameter(Mandatory = $false)] + $Install_Parameters = '/S /v"/qn REBOOT=R"', + [Parameter(Mandatory = $false)] + $Artifactory_Installer_Path = "/tech-installs/applications/VMWare-Tools", + [Parameter(Mandatory = $false)] + $Artifactory_URL = "https://URLHERE/artifactory", + [Parameter(Mandatory = $false)] + $Dest_Path = "C:\Temp\$App_Name" +) + +Set-StrictMode -Version 2.0 + +$Creds = Get-Credential -Message "Enter user account and password" +$Dest_File = Join-Path $Dest_Path $Installer_Name.Replace("/", "") + +#Pass through variables +$params = @{ + App_Name = $App_Name + Install_Parameters = $Install_Parameters + Artifactory_Installer_Path = $Artifactory_Installer_Path + Artifactory_URL = $Artifactory_URL + Creds = $Creds + Dest_Path = $Dest_Path + Dest_File = $Dest_File +} +#EndRegion + +#Region Required Modules +$Module_Name = 'Artifactory-Functions' +$Repository = Get-PSRepository | Select-Object -ExpandProperty Name +If ($Repository -eq "Artifactory") { + $Module_Test = Get-InstalledModule -Name $Module_Name -ErrorAction SilentlyContinue + If ($null -ne $Module_Test) { + Update-Module -Name $Module_Name -Credential $Creds + Import-Module -Name $Module_Name + } + Else { + Install-Module -Name $Module_Name -Repository Artifactory -Credential $Creds -Scope CurrentUser + } +} +Else { + Write-Output "Artifactory Repo not found, exiting" + Exit +} +#EndRegion + +#Region Functions +Function Test-If_VM { + $osInfo = Get-CimInstance -ClassName Win32_OperatingSystem + If ($osInfo.ProductType -ne 1) { + $Manufacturer = (Get-CimInstance Win32_ComputerSystem).Manufacturer + If ($Manufacturer -ne "VMware, Inc.") { + Write-Output "Server is not VMware, exiting script" + Exit + } + } + Else { + Write-Output "Device is not a server, exiting script" + Exit + } +} +#EndRegion + +#Region Script Start +#Check to see if program is installed +$Applist = Get-Software | Select-Object DisplayName, DisplayVersion | Where-Object { $_.DisplayName -like "*$App_Name*" } -ErrorAction SilentlyContinue + +Test-If_VM +If ($Applist.DisplayName -eq $App_Name) { + $Test_Artifactory = Test-Artifactory @params + + If ($Test_Artifactory -eq $true) { + $Get_List = Get-Software_List_Artifactory @params + + If ($null -ne $Get_List) { + $Installer_Name = $Get_List + $params['Installer_Name'] = $Installer_Name + $Artifactory_Version = $Installer_Name.split(" - ") | Select-Object -First 3 | Select-Object -Last 1 + $Test_Installer_URL = Test-Installer_URL @params + + If ($Test_Installer_URL -eq $true ) { + #Get currently installed version and trim version number + $Local_Version = ($Applist.DisplayVersion.split(" . ") | Select-Object -First 3) -join "." + + If ([version]$Local_Version -lt [version]$Artifactory_Version) { + Get-From_Artifactory @params + Install-App @params + } + Else { + Write-Output "$App_Name already on latest version (Installed version: $Local_Version)" + } + } + Else { + Write-Output "$Test_Installer_URL" + } + } + Else { + Write-Output "Artifactory doesn't have an installer for $App_Name" + } + } +} +Else { + Write-Output "$App_Name is not installed" +} +#Region Script End \ No newline at end of file