以下脚本的作用是什么?

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 } } }"

发现这个批处理脚本隐藏在某处 在我的 C: 驱动器中,想知道这个脚本的作用。

这是脚本的 Powershell 部分:

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

Powershell 部分:

  1. 获取您的驱动器映射
  2. 已用完 space 的支票(可能全部)
  3. 遍历这些并删除 Windows10Upgrade 文件夹中扩展名为 .esd
  4. 的所有文件

例如

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

查看下面的代码注释版本,解释每一行:

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

我建议 运行 在 Powershell 中这样做:

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

了解其工作原理。