
Estou procurando orientação sobre como executar a tarefa acima.
Meu script Powershell é como abaixo, o script atualmente remove um aplicativo nomeado específico.
$AppsToDelete="*Microsoft.WindowsReadingList*"
Foreach ($AppName in $AppsToDelete)
{
get-appxprovisionedpackage -online | where packagename -like $AppName | remove-appxprovisionedpackage -Online
Get-AppxPackage -name $AppName -allusers | Remove-AppxPackage
}
O programa usado pelo SCCM2012 para executar o script é o seguinte -
PowerShell.exe -ExecutionPolicy UnRestricted -File .\delappsreadinglistonly.ps1
Criei um programa no SCCM 2012 e implantei em um cliente.
O programa está configurado para ser executado como usuário, não como sistema.
O arquivo EXECMGR.log informa que o script foi recebido pelo cliente e foi executado com sucesso, código de saída = 0, o status de execução é Sucesso.
Dito isso, o bloco Lista de leitura ainda está na tela inicial (Metro?), o aplicativo Lista de leitura ainda aparece na lista alfabética de aplicativos por nome e pode ser executado e várias pastas ainda existem em C:\program files\windowsapps\
Ponteiros seriam apreciados.
Responder1
Vejo dois problemas potenciais com seu script:
- As chamadas
-AppxProvisionedPackage
provavelmente requerem elevação. Quando você executa seu script como usuário, provavelmente gera uma exceção. - A chamada para
Get-AppxPackage -allusers
requer permissões de administrador. A documentaçãopara-allusers
leituras "para usar este parâmetro, você deve executar o comando usando permissões de administrador."
Não está claro para mim exatamente qual é o seu objetivo. Veja como eu lido com a bagunça de blocos na tela inicial do Windows 8.1:
- Crie um aplicativo SCCM com as seguintes características:
- sem instalador
- desinstalador que pede
Remove-AppxPackage
uma lista de aplicativos comuns - script de detecção para essa lista de aplicativos
- Implante o aplicativo com a ação de desinstalação nos afetadosUsuários.
Eu uso essa estratégia porque ela torna as coisas mais cirúrgicas com quais desses aplicativos estarão disponíveis para usuários específicos no futuro, se isso for necessário.
Quando um usuário para o qual este Aplicativo está implantado para remoção está conectado, CcmExec
eventualmente detecta o aplicativo e invoca o comando de desinstalação. Depois que o comando de desinstalação for invocado, os aplicativos não deverão mais estar visíveis ou disponíveis para o usuário.
Desinstalar-Application.ps1
Aqui está o corpo do script de desinstalação que uso. Você precisa ter cuidado ao configurar scripts do PowerShell que são invocados para (des)instalação porquecódigos de saída são um pouco complicados de obter do script de maneira confiável.
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList } |
% { Remove-AppxPackage $_.PackageFullName }
Detectar aplicativo.ps1
Abaixo está o corpo do script de detecção que uso. Observe que existem algumas armadilhas no uso de scripts de detecção do PowerShell:
- Você precisará assinar os scripts se tiver uma
xSigned
política de execução em um cliente, independentemente do que as configurações do cliente e os logs dizem sobre o uso do-ByPass
. - A semântica da saída do script de detecção é misteriosa eapenas documentado não oficialmente, mas os IME são confiáveis.
- Você precisa preparar seus scripts de detecção do PowerShell usandoSolução alternativa de Adam Meltzerpara fazê-los trabalhar.
- Você também deve pelo menos estar ciente dealguma peculiaridade em relação ao contexto em que os scripts de detecção do PowerShell são executados.
Se você fizer tudo isso, os scripts de detecção do PowerShell funcionarão perfeitamente para detecções complicadas, cirúrgicas ou não convencionais como esta.
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList }