我发现2015年这个旧的PowerShell文件删除了无用的Windows 10应用程序.很有用.但是出于代码压缩的原因,我发现它是这样编写的,我知道这只是浪费重复的语句:
Write-Host -NoNewline "Removing Candy Crush App..." -ForegroundColor White
Get-AppxPackage -AllUsers | Where-Object {$_.Name -like "king.com*"} | $
Write-Host "DONE" -ForegroundColor Green
Write-Host -Nonewline "Removing Twitter App..." -ForegroundColor White
Get-AppxPackage -AllUsers | Where-Object {$_.Name -like "*Twitter"} | Remove-AppxPackage
Write-Host "DONE" -ForegroundColor Green
Write-Host -Nonewline "Removing Facebook App..." -ForegroundColor White
Get-AppxPackage -AllUsers | Where-Object {$_.Name -like "*Facebook"} | Remove-AppxPackage
Write-Host "DONE" -ForegroundColor Green
...
# News / Sports / Weather
If ($App.DisplayName -eq "Microsoft.BingFinance")
{
Write-Host -NoNewline "Removing Finance App..." -ForegroundColor Yellow
Remove-AppxProvisionedPackage -Online -PackageName $App.PackageName | Out-Null
Remove-AppxPackage -Package $App.PackageName | Out-Null
Write-Host "DONE" -ForegroundColor Green
}
If ($App.DisplayName -eq "Microsoft.BingNews")
{
Write-Host -NoNewline "Removing News App..." -ForegroundColor Yellow
Remove-AppxProvisionedPackage -Online -PackageName $App.PackageName | Out-Null
Remove-AppxPackage -Package $App.PackageName | Out-Null
Write-Host "DONE" -ForegroundColor Green
}
...
Run Code Online (Sandbox Code Playgroud)
我的想法:将每个应用程序及其显示的状态消息存储在每个应用程序中Write-Host作为键控数组自动存储,例如:
$Apps (
[0] (
[string]$StatusMessage = "Removing Candy Crush App...",
[object]$AppObject = object
[string]$AppType = "allusers"
)
...
[7] (
[string]$StatusMessage = "Removing Bing News app..."
[object]$AppObject = object
[string]$AppType = "provisioned"
)
[8] (
[string]$StatusMessage = "Removing Bing Finance app..."
[object]$AppObject = object
[string]$AppType = "provisioned"
)
...
)
Run Code Online (Sandbox Code Playgroud)
我们的配置中的"黑名单",我想与之匹配$Apps[key].AppOject.Name:
$Blacklist (
"king.com",
"*Twitter",
"*Facebook",
"Microsoft.BingFinance",
"Microsoft.BingNews",
...
)
Run Code Online (Sandbox Code Playgroud)
这样我就可以在一个简单的处理For Each $Apps as $App它,如果它需要删除作为配置的应用程序而不是常规的用户应用程序,并输出辉煌的过程作为用户的漂亮的自定义ANSI栏,因为我们有一个键控数组到与一些实际存在的应用程序相关,这些应用程序绝对会与我们的黑名单相匹配.:-)
如何将我们的应用程序数组存储在这样的键控数组中,这样我就可以轻松地在一个字符串中进行匹配For Each $Apps as $App来正确处理每个应用程序?
你想要的是哈希表.使用哈希表,您可以定义键和关联值.为了您的目的,我将为每个值创建一个PSCustomObject.像这样的东西:
$Apps = Get-AppxPackage -AllUsers
$Apps += Get-AppxProvisionedPackage -Online
$AppHash = @{
'king.com' = [pscustomobject]@{
'StatusMessage' = "Removing Candy Crush App..."
'AppObject' = $Apps | Where{$_.Name -like 'king.com*'}
'AppType' = 'AllUsers'
}
'Microsoft.BingNews' = [pscustomobject]@{
'StatusMessage' = "Removing Candy Crush App..."
'AppObject' = $Apps | Where{$_.Name -like 'king.com*'}
'AppType' = 'Provisioned'
}
}
Run Code Online (Sandbox Code Playgroud)
然后你就像你描述的那样打电话:
Write-Host $AppHash['king.com'].StatusMessage
$AppHash['king.com'].AppObject | Remove-AppxPackage
Run Code Online (Sandbox Code Playgroud)
你需要在那里写一些逻辑来处理配置的东西,但这应该适合你所描述的需求.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |