gpt4 book ai didi

powershell - 比较2个数组并保留相似的列

转载 作者:行者123 更新时间:2023-12-03 01:05:12 24 4
gpt4 key购买 nike

我正在研究一种使用Windows 10 PC上的启动脚本删除默认应用程序的方法。

到目前为止,这是我的脚本:

$RemovalList = @(
'Microsoft.Messaging'
'Microsoft.MicrosoftOfficeHub'
'Microsoft.MicrosoftSolitaireCollection'
'Microsoft.Office.OneNote'
'Microsoft.SkypeApp'
'microsoft.windowscommunicationsapps'
'Microsoft.XboxApp'
'Microsoft.XboxGameOverlay'
'Microsoft.XboxIdentityProvider'
'Microsoft.XboxSpeechToTextOverlay'
'Microsoft.ZuneMusic'
'Microsoft.ZuneVideo'
)

$RemovalList1 = "" | Select DisplayName
$RemovalList1.DisplayName = $RemovalList

$array = @();
$dismRaw = (DISM /Online /Get-ProvisionedAppxPackages)
$PNList = ($dismRaw | Select-string PackageName) -replace "PackageName : ", ""
$DNList = ($dismRaw | Select-string DisplayName) -replace "DisplayName : ", ""
$Apps = "" | select DisplayName,PackageName
$Apps.DisplayName = $DNList
$Apps.PackageName = $PNList
$array += $Apps

$Apps = $Apps | Where {$_.DisplayName -eq $RemovalList1.DisplayName} #<-- Trying to remove the differences
$Apps.PackageName | % {dism /Online /Remove-ProvisionedAppxPackage /PackageName:$_}

我想念什么?

我希望 $Apps数组删除 $RemovalList中的所有内容。然后,我想将其传递给命令 dism /Online /Remove-ProvisionedAppxPackage /PackageName:$_

更新2018年5月17日
更多信息:
如果我使用Remove-ProvisionedAppxPackage,它将为系统删除,并且当用户首次登录系统时,这些应用将无法安装,但该cmdlet将无法启动。它不会检测到它们在那里。使用“dism / Online / Remove-ProvisionedAppxPackage / PackageName:$ _”的工作原理.....我想获取2个数组。第一个是$ RemovalList,第二个是$ apps。 $ apps具有2列DisplayName和PackageName。我想从$ apps数组中删除不在$ RemovalList中的行。

另一个更新2018年5月17日
因此,我决定将PackageName与$ Removal List进行比较,而不是比较两个数组并去除两个数组中没有的数组。它正在运行,但仍然没有回答我原来的问题。 :(哦,很好。

新代码:
$RemovalList=@(
'Microsoft.Messaging'
'Microsoft.MicrosoftOfficeHub'
'Microsoft.MicrosoftSolitaireCollection'
'Microsoft.Office.OneNote'
'Microsoft.SkypeApp'
'microsoft.windowscommunicationsapps'
'Microsoft.XboxApp'
'Microsoft.XboxGameOverlay'
'Microsoft.XboxIdentityProvider'
'Microsoft.XboxSpeechToTextOverlay'
'Microsoft.ZuneMusic'
'Microsoft.ZuneVideo'
)

$dismRaw = (DISM /Online /Get-ProvisionedAppxPackages)
$PNList = ($dismRaw | Select-string PackageName) -replace "PackageName : ", ""
$AppsToRemove = "" | select PackageName
$AppsToRemove.PackageName = $PNList | where {$RemovalList -contains $(($_).Split("_")[0])}

ForEach ($RemoveApp in $AppsToRemove.PackageName) {
Write-Output "Removing: $RemoveApp"
DISM /Online /Remove-ProvisionedAppxPackage /PackageName:$RemoveApp

}

谢谢你的帮助! :)

最佳答案

PowerShell具有用于AppX内容的cmdlet ...您的脚本可以编写为:

$RemovalList=@(
'Microsoft.Messaging'
'Microsoft.MicrosoftOfficeHub'
'Microsoft.MicrosoftSolitaireCollection'
'Microsoft.Office.OneNote'
'Microsoft.SkypeApp'
'microsoft.windowscommunicationsapps'
'Microsoft.XboxApp'
'Microsoft.XboxGameOverlay'
'Microsoft.XboxIdentityProvider'
'Microsoft.XboxSpeechToTextOverlay'
'Microsoft.ZuneMusic'
'Microsoft.ZuneVideo'
)

$RemovalList | % {Get-AppxPackage -Name $_} | Remove-AppxPackage -WhatIf

删除 -WhatIf即可实际删除这些内容。

另请参阅 this nice GitHub link,以获取更多控制Windows项的内容。

关于powershell - 比较2个数组并保留相似的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com