Вопрос или проблема
Ниже представлена перефразированная версия кода, которую мне удалось найти (в основном из первого ответа и третьего с конца ответа на learn.microsoft.com/en-us/archive/msdn-technet-forums/5ac7daa9-54e6-43c0-9746-293dcb8ef2ec#all-replies-9
, который также это запрашивает):
#!/usr/bin/env -S pwsh
#Requires -PSEdition 'Core'
#Requires -Version 7
# Общие
# ------
$NamespaceName="root\cimv2\mdm\dmmap"
$ClassName="MDM_EnterpriseModernAppManagement_AppManagement01"
# Стиль DotNet
# ------------
$WMIObj = Get-WmiObject -Namespace "$NamespaceName" -Class "$ClassName"
$Result = $WMIObj.UpdateScanMethod()
# Стиль PowerShell
# ----------------
Get-CimInstance `
-Namespace "$NamespaceName" `
-ClassName "$ClassName"
| Invoke-CimMethod -MethodName 'UpdateScanMethod'
Я ожидал, что это будет работать, и оно не выдает ошибок при вызове. Вместо этого оно, похоже, зависает бесконечно. Следовательно, я прошу версию, которая известна как рабочая, и способ проверить, что она успешно выполнила свою задачу (если это возможно).
Я слышал, что winget update --all
также может проверять пакеты, установленные из репозитория msstore
, но я вижу мало доказательств этого.
Ответ или решение
Как программно вызвать обновление пакетов в Microsoft Store и проверить наличие доступных обновлений
Для автоматизации процесса обновления приложений из Microsoft Store можно использовать PowerShell и WMI (Windows Management Instrumentation). В данной статье мы рассмотрим код, который позволяет это сделать, а также методы проверки наличия доступных обновлений после его выполнения.
Шаг 1: Программный вызов метода обновления
С помощью PowerShell можно использовать класс MDM_EnterpriseModernAppManagement_AppManagement01
, который доступен в пространстве имен root\cimv2\mdm\dmmap
. Вот пример кода, который позволяет вызвать метод обновления:
#!/usr/bin/env -S pwsh
#Requires -PSEdition 'Core'
#Requires -Version 7
# Общие переменные
# -----------------
$NamespaceName = "root\cimv2\mdm\dmmap"
$ClassName = "MDM_EnterpriseModernAppManagement_AppManagement01"
# Стиль DotNet
# ------------
$WMIObj = Get-WmiObject -Namespace "$NamespaceName" -Class "$ClassName"
$Result = $WMIObj.UpdateScanMethod()
# Стиль PowerShell
# ----------------
Get-CimInstance `
-Namespace "$NamespaceName" `
-ClassName "$ClassName" `
| Invoke-CimMethod -MethodName 'UpdateScanMethod'
Этот код запускает метод UpdateScanMethod
, который инициирует сканирование доступных обновлений в Microsoft Store.
Шаг 2: Проверка успешности обновления
Хотя выполнение метода UpdateScanMethod
не возвращает ошибок непосредственно, можно использовать команду Get-CimInstance
для проверки статуса установки обновлений. К сожалению, точного способа получить статус обновлений через WMI нет. Однако, доступно следующее решение:
- Для проверки списка установленных приложений и их статусов можно использовать следующую команду:
Get-WmiObject -Namespace "$NamespaceName" -Class "MDM_EnterpriseModernAppManagement_AppManagement01" | Select-Object -Property *
- Также, если вы используете
winget
, можно выполнить команду, которая проверяет доступные обновления:
winget upgrade
Замечания по эффективности
Если ваш оригинальный скрипт "висял", возможно, возникли временные задержки в процессе или блокировки, связанные с управлением приложениями. Убедитесь, что PowerShell запускается от имени администратора, чтобы избежать проблем с разрешениями.
Альтернативные решения
Для более глубокого контроля и возможности проверки обновлений используйте winget
. Хотя имеются сообщения о том, что winget update --all
может не обрабатывать пакет из msstore
, стоит протестировать его в вашем окружении на случай изменений в функционале.
winget update --all
Это обеспечит проверку обновлений для всех пакетов, включая те, что установлены из Microsoft Store.
Заключение
Программный вызов обновления пакетов из Microsoft Store является полезной задачей для IT-специалистов, стремящихся автоматизировать управление приложениями. Используя предоставленный код и стратегии проверки, вы сможете эффективно обновлять и контролировать пакеты, сохраняя ваше программное обеспечение актуальным. Убедитесь, что все команды выполняются в окружении с достаточными правами для успешного выполнения всех необходимых операций.