126 lines
4.2 KiB
PowerShell
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 |