sysinternals
1 TopicBlog post - Install or update the SysInternals Suite using PowerShell
Wrote a blog post on how to install or update your Sysinternals Suite using PowerShell, link to post https://powershellisfun.com/2023/01/27/install-or-update-your-sysinternals-suite-using-powershell/ . You can read there how it works, and yes, you can install it using the Windows Store, but where's the fun in that 😉 (And... The Windows Store is not available on your Windows Server management VM, for example) The script I made : function Install-SysInternalsSuite { param ( [parameter(Mandatory = $true)][string]$InstallPath ) #Create the installation folder if not already present if (-not (Test-Path -path $InstallPath)) { try { New-Item -ItemType Directory -Path $InstallPath -ErrorAction Stop | Out-Null Write-Host ("Specified installation path {0} not found, creating now...." -f $InstallPath) -ForegroundColor Green } catch { Write-Warning ("Install path {0} not found, creating now...." -f $InstallPath) Write-Warning ("Error creating path {0}, check path and permissions. Exiting now..." -f $InstallPath) return } } else { Write-Host ("Specified installation path {0} found, continuing...." -f $InstallPath) -ForegroundColor Green } #Check if the previous download folder is present. Remove it first if it is if (Test-Path -Path $env:temp\SysInternalsSuite) { Write-Warning ("Previous extracted version found in {0}, removing it now..." -f $env:temp) Remove-Item -Path $env:temp\SysInternalsSuite -Force:$true -Confirm:$false -Recurse } else { Write-Host ("No previous download found in {0}\SysInternalsSuite, continuing..." -f $env:temp) -ForegroundColor Green } #Download and extract the latest version try { $ProgressPreference = "SilentlyContinue" Invoke-Webrequest -uri https://download.sysinternals.com/files/SysinternalsSuite.zip -Outfile $ENV:TEMP\SysInternalsSuite.zip -ErrorAction Stop Write-Host ("Downloading latest version to {0}\SysinternalsSuite.zip" -f $env:temp) -ForegroundColor Green Expand-Archive -LiteralPath $ENV:TEMP\SysInternalsSuite.zip -DestinationPath $env:temp\SysInternalsSuite -Force:$true -ErrorAction Stop Write-Host ("Extracting files to {0}\SysInternalsSuite" -f $env:temp) -ForegroundColor Green } catch { Write-Warning ("Error downloading/extracting the SysInternalsSuite, exiting...") return } #Loop through the files and only overwrite older versions and report updated programs on-screen. #Additional files which were not present in the installation folder will be added $totalfiles = (Get-ChildItem -Path $env:temp\SysInternalsSuite).count $updated = 0 foreach ($file in Get-ChildItem -Path $env:temp\SysInternalsSuite) { if ((Test-Path -path "$($InstallPath)\$($file.Name)") -and (Test-Path -Path "$($env:temp)\SysInternalsSuite\$($file.name)")) { $currentversion = (Get-Item "$($InstallPath)\$($file.Name)").VersionInfo $downloadversion = (Get-Item "$($env:temp)\SysInternalsSuite\$($file.name)").VersionInfo if ($currentversion.ProductVersion -lt $downloadversion.ProductVersion) { try { Copy-Item -LiteralPath "$($env:temp)\SysInternalsSuite\$($file.name)" -Destination "$($InstallPath)\$($file.Name)" -Force:$true -Confirm:$false -ErrorAction Stop write-host ("- Updating {0} from version {1} to version {2}" -f $file.Name, $currentversion.ProductVersion, $downloadversion.ProductVersion) -ForegroundColor Green ++$updated } catch { Write-Warning ("Error overwriting {0}, please check permissions or perhaps the file is in use?" -f $file.name) } } } else { try { Copy-Item -LiteralPath "$($env:temp)\SysInternalsSuite\$($file.name)" -Destination "$($InstallPath)\$($file.Name)" -Force:$true -Confirm:$false -ErrorAction Stop write-host ("- Copying new file {0} to {1}" -f $file.Name, $InstallPath) -ForegroundColor Green ++$updated } catch { Write-Warning ("Error copying {0}, please check permissions" -f $file.name) } } } #Add installation folder to Path for easy access if not already present if ((Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path -split ';' -notcontains $InstallPath) { Write-Host ("Adding {0} with the SysInternalsSuite to the System Path" -f $InstallPath) -ForegroundColor Green $OldPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path $NewPath = $OldPath + ";$($InstallPath)" Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $NewPath } else { Write-Host ("The installation folder {0} is already present in the System Path, skipping adding it..." -f $InstallPath) -ForegroundColor Green } #Cleanup files if (Test-Path -Path $env:temp\SysInternalsSuite) { Write-Host ("Cleaning extracted version in {0}" -f $env:temp) -ForegroundColor Green Remove-Item -Path $env:temp\SysInternalsSuite -Force:$true -Confirm:$false -Recurse } if (Test-Path -Path $env:temp\SysInternalsSuite.zip) { Write-Host ("Cleaning downloaded SysinternalsSuite.zip file in {0}" -f $env:temp) -ForegroundColor Green Remove-Item -Path $env:temp\SysInternalsSuite.zip -Force:$true -Confirm:$false } #Display totals and exit Write-Host ("Updated {0} files in {1} from the downloaded {2} files" -f $updated, $InstallPath, $totalfiles) -ForegroundColor Green return }2.6KViews0likes0Comments