
Мне нужны рекомендации по выполнению вышеуказанной задачи.
Мой скрипт Powershell выглядит следующим образом. В настоящее время скрипт удаляет одно конкретное именованное приложение.
$AppsToDelete="*Microsoft.WindowsReadingList*"
Foreach ($AppName in $AppsToDelete)
{
get-appxprovisionedpackage -online | where packagename -like $AppName | remove-appxprovisionedpackage -Online
Get-AppxPackage -name $AppName -allusers | Remove-AppxPackage
}
Программа, используемая SCCM2012 для выполнения скрипта, выглядит следующим образом:
PowerShell.exe -ExecutionPolicy UnRestricted -File .\delappsreadinglistonly.ps1
Я создал программу в SCCM 2012 и развернул ее на клиенте.
Программа настроена на запуск от имени пользователя, а не системы.
Файл EXECMGR.log сообщает мне, что скрипт получен клиентом и успешно выполнен, код выхода = 0, статус выполнения — «Успешно».
Тем не менее, плитка «Список для чтения» по-прежнему находится на начальном экране (Metro?), приложение «Список для чтения» по-прежнему отображается в алфавитном списке приложений и может быть запущено, а различные папки по-прежнему существуют в C:\program files\windowsapps\
Буду признателен за указания.
решение1
Я вижу две потенциальные проблемы в вашем сценарии:
- Вызовы,
-AppxProvisionedPackage
скорее всего, требуют повышения. Когда вы запускаете свой скрипт как пользователь, он, вероятно, выдает исключение. - Для вызова
Get-AppxPackage -allusers
требуются права администратора. Документациядля-allusers
читается «чтобы использовать этот параметр, необходимо запустить команду с правами администратора».
Мне не совсем понятно, в чем именно заключается ваша цель. Вот как я справляюсь с беспорядком плиток на начальном экране Windows 8.1:
- Создайте приложение SCCM со следующими характеристиками:
- нет установщика
- деинсталлятор, который запрашивает
Remove-AppxPackage
список распространенных приложений - скрипт обнаружения для этого списка приложений
- Разверните приложение с действием «Удалить» на затронутом устройстве.пользователи.
Я использую эту стратегию, потому что она позволяет более точно определить, какие из этих приложений будут доступны конкретным пользователям в будущем, если это окажется необходимым.
Когда пользователь, которому это приложение было развернуто для удаления, входит в систему, CcmExec
в конечном итоге обнаруживает приложение и вызывает команду удаления. После вызова команды удаления приложения больше не должны быть видны или доступны пользователю.
Удаление-приложения.ps1
Вот тело скрипта удаления, который я использую. Вам нужно быть осторожным с тем, как вы настраиваете скрипты PowerShell, которые вызываются для (де)установки, потому чтокоды выхода немного сложно получить из скрипта надежно.
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList } |
% { Remove-AppxPackage $_.PackageFullName }
Detect-Application.ps1
Ниже приведен текст скрипта обнаружения, который я использую. Обратите внимание, что есть некоторые подводные камни при использовании скриптов обнаружения PowerShell:
- Вам необходимо будет подписать скрипты, если у вас есть
xSigned
политика выполнения на клиенте, несмотря на то, что настройки клиента и журналы говорят об использовании-ByPass
. - Семантика выходных данных скрипта обнаружения загадочна итолько неофициально задокументировано, но IME надежны.
- Вам необходимо подготовить скрипты обнаружения PowerShell с помощьюОбходной путь Адама Мельцерачтобы заставить их работать.
- Вы также должны, по крайней мере, знать онекоторые странности относительно контекста, в котором выполняются скрипты обнаружения PowerShell.
Если вы все это сделаете, скрипты обнаружения PowerShell прекрасно справятся с такими сложными, хирургическими или нетрадиционными задачами, как это.
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList }