Search code examples
windowspowershellpowershell-2.0powershell-3.0

What does the following script do?


@echo off
setlocal
set _RunOnceValue=%~d0%\Windows10Upgrade\Windows10UpgraderApp.exe /SkipSelfUpdate
set _RunOnceKey=Windows10UpgraderApp.exe
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "%_RunOnceKey%" /t REG_SZ /F /D "%_RunOnceValue%"
PowerShell -Command "&{ Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Used -gt 0 } | ForEach-Object { $esdOriginalFilePath = 'C:\Windows10Upgrade\\*.esd'; $driveName = $_.Name; $esdFilePath = $esdOriginalFilePath -replace '^\w',$driveName; if (Test-Path $esdFilePath) { Remove-Item $esdFilePath } } }"

Found this batch script hidden somewhere in my C: Drive and want to know what does this script do.

This is the Powershell portion of the script:

Get-PSDrive -PSProvider FileSystem |
  Where-Object { $_.Used -gt 0 } |
    ForEach-Object { 
        $esdOriginalFilePath = 'C:\Windows10Upgrade\\*.esd'; 
        $driveName = $_.Name; 
        $esdFilePath = $esdOriginalFilePath -replace '^\w',$driveName; 
        if (Test-Path $esdFilePath) 
            { Remove-Item $esdFilePath } 
    }

Solution

  • The Powershell part:

    1. Gets your drive mappings
    2. Checks which have used up space in them (probably all of them)
    3. Loops through these and removes any files that are in Windows10Upgrade folders that have the extension .esd

    e.g.

    M:\Windows10Upgrade\*.esd
    S:\Windows10Upgrade\*.esd
    T:\Windows10Upgrade\*.esd
    

    See below for a commented version of the code, explaining each line:

    # Get shared drives
    Get-PSDrive -PSProvider FileSystem |
      # Filter just those with used space
      Where-Object { $_.Used -gt 0 } |
        # Go through each of those drives
        ForEach-Object { 
          # Set a variable with the Windows10Upgrade folder and *.esd wildcard
          $esdOriginalFilePath = 'C:\Windows10Upgrade\\*.esd'; 
          # Get the drive name for the one currently in the loop ($_)
          $driveName = $_.Name; 
          # Use a regex replace of the first 'word' character with drivename (e.g. C -> E, C -> W)
          $esdFilePath = $esdOriginalFilePath -replace '^\w',$driveName; 
          # Check if the path exists
          if (Test-Path $esdFilePath) 
              # If so, remove the file
              { Remove-Item $esdFilePath } 
        }
    

    I would suggest running this in Powershell:

    Get-PSDrive -PSProvider FileSystem |
      Where-Object { $_.Used -gt 0 } 
    

    To get an idea of how this works.