У меня есть сценарий, который перебирает все рабочие станции из подразделения Active Directory и извлекает данные о программном обеспечении с каждой машины.
Я нашел два класса, которые дают мне эти данные:
Win32_Product
Win32_InstalledWin32Program
Последний список является более полным, поскольку, насколько я понимаю, Изменить: узнал, что запросы Win32_Product инициирует проверку согласованности для каждого запрашиваемого программного обеспечения, что может привести к переустановке программы в случае обнаружения ошибок. Буду полностью исключать Win32_Product и благодарить все божественные силы за то, что я не переустановил какой-то критически важный производственный инструмент. https://support.microsoft.com/en-ca/help/974524/event-log-message-indicates-that-the-windows-installer-reconfigured-alWin32_Product
отображает только приложения, установленные с помощью установщика Windows, хотя последний не включает свойство InstallDate. Наличие InstallDate менее важно, чем наличие полного списка, поэтому я объединил вывод двух моих команд GWMI
и использовал Sort-Object -Property Name -Unique
, чтобы приблизиться к тому, что я ищу.
По какой-то причине класс Win32_InstalledWin32Program
недоступен на некоторых компьютерах, и я получаю сообщение об ошибке Get-WMIObject : Invalid Class
. После проверки с помощью Get-WMIObject
на нескольких проблемных машинах я могу подтвердить, что нужный мне класс недоступен. Почему это может быть так, и есть ли способ сделать это доступным для меня? Я не могу найти в документации ничего о зависимости. Все машины работают под управлением Windows 7, см. снимок экрана ниже.
$winProduct = GWMI Win32_Product -ComputerName $computer | Select-Object Name,Vendor,Version,InstallDate
# vvv This fails on certain machines.
$winPrograms = GWMI Win32_InstalledWin32Program -ComputerName $computer| Select-Object Name, Vendor, Version, InstallDate
$winProduct + $winPrograms | Sort-Object -Property Name -Unique | export-csv -path $targetSWfile -notype