PowerShell脚本中的if语句未按预期工作

编程语言 2026-07-10

以下代码用于精简工作站。它能正常工作,但if语句并未按预期工作。它移除了已安装的应用,但输出的是 "Removal Failed" 而不是 "Removal Successful"。

# Loop through the list and remove each app
foreach ($AppName in $AppsToRemove) {
    Write-Host "Attempting to remove $AppName..."

    # Get the package for the current user and pipe it to Remove-AppxPackage
     if ((Get-AppxPackage -Name $AppName | Remove-AppxPackage -AllUsers))
    {
      #Remove Provisioned package
      Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -like $AppName} | Remove-AppxProvisionedPackage -Online
      Write-Host "Removal Successful"
    }
      else
    {
      Write-Host "Removal Failed"
    }

}

解决方案

问题在于 Remove-AppxPackage 在执行时会返回 $null,因此 if 条件始终为假,始终进入 else,并打印出 "Removal Failed"。

这应该可以解决这个问题

foreach ($AppName in $AppsToRemove) {
    Write-Host "Attempting to remove $AppName..."

    try {
        $package = Get-AppxPackage -Name $AppName
        if ($package) {
            $package | Remove-AppxPackage -AllUsers -ErrorAction Stop

            # Remove provisioned package so it doesn't reinstall
            Get-AppxProvisionedPackage -Online |
                Where-Object { $_.DisplayName -like $AppName } |
                Remove-AppxProvisionedPackage -Online -ErrorAction Stop

            Write-Host "Removal Successful"
        } else {
            Write-Host "$AppName not found, skipping."
        }
    }
    catch {
        Write-Host "Removal Failed: $_"
    }
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章