Files

126 lines
4.2 KiB
PowerShell

<#
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