Wmi получить список программ

Мне нужно получить список установленных программ на удаленных хостах Windows, используя wmi звонки. Я пытался использовать Win32_Product а также Win32Reg_AddRemovePrograms Классы.

Преимущество использования Win32_Product является то, что он отображает все программное обеспечение, установленное на машине, но это очень очень медленно и не работает на более чем 90% хостов (давая ошибки как NTSTATUS: NT code 0xc002001b — NT code 0xc002001b ). С другой стороны, Win32Reg_AddRemovePrograms намного быстрее и работает довольно хорошо на большинстве хостов, но пропускает много программного обеспечения.

Есть ли другой класс Win32, который мог бы сделать то же самое эффективно?

user2523572 05 авг ’14 в 04:51 2014-08-05 04:51
2014-08-05 04:51

2 ответа

Вы можете использовать wmic.

wmic product get name,version /format:csv wmic /node:localhost /output:d:programlist.htm product get name,version /format:htable.xsl wmic product get name,version wmic softwareelement get name,version wmic softwarefeature get name,version wmic wmic:rootcli>/output:c:ProgramList.txt product get name,version

Или вы можете сделать это как «Установка и удаление программ», читая все разделы реестра удаления:

WMI объекты в Windows PowerShell 2.0


HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall

В 64-битной Windows не забудьте также проверить:

HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall

Чтобы вернуть список всего программного обеспечения, установленного на компьютере, независимо от того, установлен ли он Windows Installer:

Const HKLM = .» strKey = «SOFTWAREMicrosoftWindowsCurrentVersionUninstall» strEntry1a = «DisplayName» strEntry1b = «QuietDisplayName» strEntry2 = «InstallDate» strEntry3 = «VersionMajor» strEntry4 = «VersionMinor» strEntry5 = «EstimatedSize» Set objReg = GetObject(«winmgmts://» _ «/root/default:StdRegProv») objReg.EnumKey HKLM, strKey, arrSubkeys WScript.Echo «Installed Applications» strSubkey, _ strEntry1a, strValue1) If intRet1 <> 0 Then objReg.GetStringValue HKLM, strKey > «» Then WScript.Echo VbCrLf Display Name: » strSubkey, _ strEntry2, strValue2 If strValue2 <> «» Then WScript.Echo «Install Date: » strSubkey, _ strEntry3, intValue3 objReg.GetDWORDValue HKLM, strKey > «» Then WScript.Echo «Version: » «.» strSubkey, _ strEntry5, intValue5 If intValue5 <> «» Then WScript.Echo «Estimated Size: » » megabytes» End If Next

Читайте также:
Как записать песню на компьютере программа

Источник: stackru.com

Сбор информации о компьютерах

Этот пример применяется только к платформам Windows.

Командлеты из модуля CimCmdlets — самые важные для общих задач управления системой. Все ключевые параметры подсистемы доступны через инструментарий WMI. Более того, инструментарий WMI обрабатывает данные как объекты, сгруппированные в коллекции из одного или нескольких элементов. Так как PowerShell также работает с объектами и имеет конвейер, позволяющий обрабатывать один или несколько объектов одинаково, универсальный доступ WMI позволяет выполнять некоторые сложные задачи с очень малой работой.

СПОСОБ УДАЛЕНИЯ 99% ВСЕХ МАЙНЕРОВ И ВИРУСОВ!

Перечисление параметров рабочего стола

Для начала рассмотрим команду, собирающую сведения о рабочих столах локального компьютера.

Get-CimInstance -ClassName Win32_Desktop

При этом возвращаются сведения для всех рабочих столов, независимо от того, используются они или нет.

Сведения, возвращаемые некоторыми классами WMI, могут быть очень подробными и часто содержат метаданные о классе WMI.

Так как имена большинства этих свойств метаданных начинаются с Cim, эти свойства можно отфильтровать с помощью Select-Object . Укажите параметр -ExcludeProperty, используя «Cim*» как значение. Пример:

Get-CimInstance -ClassName Win32_Desktop | Select-Object -ExcludeProperty «CIM*»

Чтобы отфильтровать метаданные, используйте оператор конвейера (|) для отправки результатов команды Get-CimInstance в Select-Object -ExcludeProperty «CIM*» .

Вывод сведений о BIOS

Класс WMI Win32_BIOS возвращает довольно компактные и полные сведения о системной BIOS локального компьютера:

Get-CimInstance -ClassName Win32_BIOS

Вывод сведений о процессоре

Общие сведения о процессоре можно получить с помощью класса Win32_Processor инструментария WMI, но вам, скорее всего, потребуется отфильтровать полученные данные:

Get-CimInstance -ClassName Win32_Processor | Select-Object -ExcludeProperty «CIM*»

Чтобы получить общую строку описания семейства процессора, достаточно вернуть свойство SystemType:

Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -Property SystemType SystemType ———- X86-based PC

Перечисление изготовителя и модели компьютера

Сведения о модели компьютера также доступны в Win32_ComputerSystem. Чтобы получить данные поставщика вычислительной техники (OEM), стандартные отображаемые выходные данные фильтровать не нужно:

Get-CimInstance -ClassName Win32_ComputerSystem
Name PrimaryOwnerName Domain TotalPhysicalMemory Model Manufacturer —- —————- —— ——————- —— ———— MyPC Jane Doe WORKGROUP 804765696 DA243A-ABA 6415cl NA910 Compaq Presario 06

Выходные данные из команд, подобных показанной выше и возвращающих сведения напрямую от аппаратного обеспечения, не могут быть дополнены. Некоторые сведения неправильно настроены производителями оборудования и, следовательно, могут быть недоступны.

Читайте также:
Написать программу которая проверяет делится ли на 3 целое число введенное с клавиатуры паскаль

Список установленных исправлений

Список всех установленных исправлений можно получить с помощью Win32_QuickFixEngineering:

Get-CimInstance -ClassName Win32_QuickFixEngineering

Этот класс возвращает список исправлений в следующем виде:

Source Description HotFixID InstalledBy InstalledOn PSComputerName —— ———— ——— ———— ———— ————— Security Update KB4048951 Administrator 12/16/2017 .

Для получения более кратких сведений нужно исключить некоторые свойства. Параметр Property в Get-CimInstance позволяет выбрать только идентификаторы HotFixID, однако на самом деле возвращается больше данных, так как по умолчанию отображаются все метаданные:

Get-CimInstance -ClassName Win32_QuickFixEngineering -Property HotFixID
InstalledOn : Caption : Description : InstallDate : Name : Status : CSName : FixComments : HotFixID : KB4533002 InstalledBy : ServicePackInEffect : PSComputerName : CimClass : root/cimv2:Win32_QuickFixEngineering CimInstanceProperties : CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties .

Дополнительные данные выводятся, так как параметр Property в Get-CimInstance ограничивает свойства, возвращаемые из экземпляров класса WMI, но не объекты, возвращаемые оболочке PowerShell. Командлет Select-Object позволяет сократить возвращаемые выходные данные:

Get-CimInstance -ClassName Win32_QuickFixEngineering -Property HotFixId | Select-Object -Property HotFixId
HotFixId ——— KB4048951

Перечисление сведений о версии операционной системы

Свойства класса Win32_OperatingSystem включают сведения о версии операционной системы и пакета обновления. Эти свойства можно выбрать явным образом, чтобы получить сводные данные по версиям из Win32_OperatingSystem:

Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

Вы также можете использовать подстановочные знаки с параметром Property . Поскольку в рассматриваемом случае важны все свойства, имена которых начинаются с Build либо с ServicePack, указанную строку можно сократить:

Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -Property Build*,OSType,ServicePack*
BuildNumber : 18362 BuildType : Multiprocessor Free OSType : 18 ServicePackMajorVersion : 0 ServicePackMinorVersion : 0

Перечисление локальных пользователей и владельцев

Общие сведения о локальных пользователях можно найти с помощью Win32_OperatingSystem свойств класса. Отображаемые свойства можно указать явным образом:

Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -Property NumberOfLicensedUsers, NumberOfUsers, RegisteredUser

В более сжатом варианте используются подстановочные символы:

Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -Property *user*

Получение доступного места на диске

Чтобы просмотреть место на диске и свободное место для локальных дисков, можно использовать класс Win32_LogicalDisk . Необходимо видеть только экземпляры с типом диска 3, значение, которое WMI использует для фиксированных жестких дисков.

Get-CimInstance -ClassName Win32_LogicalDisk -Filter «DriveType=3»
DeviceID DriveType ProviderName VolumeName Size FreeSpace PSComputerName ——— ——— ———— ———- —- ——— ————— C: 3 Local Disk 203912880128 65541357568 . Q: 3 New Volume 122934034432 44298250240 .
Get-CimInstance -ClassName Win32_LogicalDisk -Filter «DriveType=3» | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum
Property Sum ——— — FreeSpace 109839607808 Size 326846914560

Читайте также:
Программа по электрике автомобилей

Получение сведений о сеансе входа

Общие сведения о сеансах входа в систему, связанных с пользователями, можно получить через класс Win32_LogonSession инструментария WMI:

Get-CimInstance -ClassName Win32_LogonSession

Получение входа пользователя на компьютер

Вы можете отобразить пользователя, вошедшего в определенную компьютерную систему, с помощью Win32_ComputerSystem. Приведенная ниже команда возвращает только пользователей, выполнивших вход на рабочий стол системы:

Get-CimInstance -ClassName Win32_ComputerSystem -Property UserName

Получение местного времени с компьютера

Вы можете получить текущее местное время на определенном компьютере с помощью класса WMI Win32_LocalTime .

Get-CimInstance -ClassName Win32_LocalTime
Day : 23 DayOfWeek : 1 Hour : 8 Milliseconds : Minute : 52 Month : 12 Quarter : 4 Second : 55 WeekInMonth : 4 Year : 2019 PSComputerName :

Отображение состояния службы

Для просмотра состояния всех служб на определенном компьютере можно локально воспользоваться командлетом Get-Service . Для удаленных систем можно использовать класс Win32_Service инструментария WMI. Если вы также используете для Select-Object фильтрации результатов по состоянию, имени и displayName, формат выходных данных почти идентичен формату из Get-Service :

Get-CimInstance -ClassName Win32_Service | Select-Object -Property Status,Name,DisplayName

Чтобы разрешить полное отображение имен для служб с длинными именами, используйте параметры AutoSize и Wrap для Format-Table . Эти параметры оптимизируют ширину столбца и позволяют переносить длинные имена вместо усечения:

Get-CimInstance -ClassName Win32_Service | Format-Table -Property Status, Name, DisplayName -AutoSize -Wrap

Источник: learn.microsoft.com

Как с помощью wmi+c# получить список установленных приложений Windows, с возможностью деинсталяции?

Что значит «не все»? Это список установленных приложений, который показывается в панели управления. Приложения, которых нет в этом списке — в панели управления показываться не будут.

>которых нет в этом списке — в панели управления показываться не будут
VoidVolker, но они показываются, хотя в ветке их нет

arxont

Вы смотрите и в HKLM, и в HKCU?

HKLM — глобальная ветка, HKCU — текущий пользователь. Соответственно в панели управления показываются программы из глобального списка и из списка конкретного пользователя. Рекомендую почитать статьи про устройство реестра и как с ним работать.

VoidVolker, я про это знаю. Только вот зачем мне HKCU со списком отдельного пользователя, когда я могу получить полный список через HKLM. В HKCU никогда не будет того, чего нет в HKLM.

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru