PowerShell脚本中的if语句未按预期工作
以下代码用于精简工作站。它能正常工作,但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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。