Keeping your Sysinternals Tools up 2 date

Share this post:

Sysinternals Tools are the must have toolset for any IT-Pro keeping them up2date got a lot easier on Windows 11 since they were added to the Windows Store:

Screenshot of Sysinternals Suite in the store

https://www.microsoft.com/store/productId/9P7KNL5RWT25

The entire suite always up to date & at your fingertips:

The Tools in Start

Great for local use, if you want to take the files to another device this turns out challenging as they are located in the App’s folder.

I’m using this PowerShell script to update my local copy of https://live.sysinternals.com in C:\tools

Edit 4/4/2026 updated script to include ARM binaries and temp change WebClient Service value to allow lager file size download (fixes RDCMan to large)

 $RegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters"
$RegistryName = "FileSizeLimitInBytes"
$DesiredValue = 80000000

# Backup the original value
$OriginalValue = if (Test-Path $RegistryPath) {
    try {
        (Get-ItemProperty -Path $RegistryPath -Name $RegistryName).$RegistryName
    }
    catch {
        $null
    }
}
else {
    $null
}

if (-not $OriginalValue -or $null -ne $OriginalValue -or $OriginalValue -ne $DesiredValue) {
    Write-Host "Updating $RegistryName to $DesiredValue..."
    Set-ItemProperty -Path $RegistryPath -Name $RegistryName -Value $DesiredValue -Force

    # Restart the WebClient service
    Write-Host "Restarting WebClient service..."
    Restart-Service -Name WebClient -Force
}
else {
    Write-Host "$RegistryName is already set to $DesiredValue."
}

$SysInternals = ''
Set-Location 'C:\tools'
Write-Host "Updating Sysinternals Tools"
Write-Host "Target Path: C:\tools\"

while (!$SysInternals) {
    (Clear-DnsClientCache), (net use r: \\live.sysinternals.com\tools), (Write-Host "getting toolslist..."), ($SysInternals = (Get-ChildItem \\live.sysinternals.com\tools\ -File))
}

foreach ($File in $SysInternals) {
    $SourcePath = "\\live.sysinternals.com\tools\$($File.Name)"
    $DestinationPath = ".\$($File.Name)"
    if (Test-Path $DestinationPath) {
        if ($File.LastWriteTime -ne (Get-Item $DestinationPath).LastWriteTime) {
            Write-Host $File.Name "is out of date. Copying new version..."
            Copy-Item -Path "$SourcePath" -Destination "$DestinationPath" -Force
        }
        else {
            Write-Host $File.Name "is up to date."
        }
    }
    else {
        Write-Host $File.Name "is new. Copying..."
        Copy-Item -Path "$SourcePath" -Destination "$DestinationPath" -Force
    }
}

$SysInternalsARM64 = ''
while (!$SysInternalsARM64) {
    (Clear-DnsClientCache), (net use r: \\live.sysinternals.com\tools), (Write-Host "getting ARM64 toolslist..."), ($SysInternalsARM64 = (Get-ChildItem \\live.sysinternals.com\tools\ARM64\ -File))
}

foreach ($File in $SysInternalsARM64) {
    $SourcePath = "\\live.sysinternals.com\tools\ARM64\$($File.Name)"
    $DestinationPath = ".\ARM64\$($File.Name)"
    if (Test-Path $DestinationPath) {
        if ($File.LastWriteTime -ne (Get-Item $DestinationPath).LastWriteTime) {
            Write-Host $File.Name "is out of date. Copying new version..."
            Copy-Item -Path $SourcePath -Destination $DestinationPath -Force
        }
        else {
            Write-Host $File.Name "is up to date."
        }
    }
    else {
        Write-Host $File.Name "is new. Copying..."
        Copy-Item -Path $SourcePath -Destination $DestinationPath -Force
    }
}

net use r: /delete


# Restore the original value at the end of the script
if ($null -ne $OriginalValue) {
    Write-Host "Restoring $RegistryName to its original value: $OriginalValue..."
    Set-ItemProperty -Path $RegistryPath -Name $RegistryName -Value $OriginalValue -Force
    Restart-Service -Name WebClient -Force
}


Write-Host "Sysinternals Tools update completed."

The script compares the local folder to the website & only downloads missing and out of date files

(the mapping of the r: is used to make sure the connection is up before the rest of the script runs)

If you make a scheduled task with:

powershell.exe -executionpolicy bypass -file “PSSysinternalsupdateTechnine.ps1”

you’ll have an always up2date folder at hand.

Share this post:

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.