Простенькая инвентаризация ПО на компьютерах

Захотелось тут одному начинающему “автоматизатору” получить данные об установленном на компьютерах сети программном обеспечении, для последующей обработке в Excel🙂

Если для получения списка компьютеров применить Quest AD Cmdlets, а для проверки их доступности Where-Online то всё будет очень просто🙂

Function Get-ComputerSoftware ($Name = "*")            
{            
    foreach ($comp in (Get-QADComputer $Name | foreach {$_.dnsname} | Where-Online))            
    {            
        Write-Host "Enumerating software for $comp...`t" -NoNewline            
        Get-WmiObject win32_product -ComputerName $comp | select name, vendor, version, @{name="Computer"; expression={$Comp}}            
        Write-Host "Done"            
    }            
}            
            
Get-ComputerSoftware -Name "Scenic*" | Export-Csv -Encoding "Unicode" -Path "c:\Report.csv"            

комментариев 13 to “Простенькая инвентаризация ПО на компьютерах”

  1. Konstantin Says:

    Xaegr, подскажите тогда, пожалуйста, как вытащить информацию, например, о версии IE?
    EE namespace :\root\cimv2\Applications\MicrosoftIE
    Спасибо.

  2. Xaegr Says:

    Konstantin, откуда вы взяли этот namespace? Я его у себя на 2008R2 RC1 не нашел🙂
    Версию IE можно посмотреть например так:
    (gi «$env:ProgramFiles\Internet Explorer\iexplore.exe»).versionInfo.productVersion
    8.00.7100.0
    Пойдёт?

  3. Konstantin Says:

    Подозреваю, что это выходит за рамки «простенькой инвентаризации», но…

    В Win32_Product не всегда можно получить полностью адекватный список программ, к примеру, пытаясь получить версию JRE, в Win32_Product у нас будут JRE update 5, JRE update 13 и т.д. Поэтому нужно ставить какой-то фильтр, что неудобно.

    Получается, что иногда проще вытаскивать информацию о версиях программ из «\root\cimv2\Applications» или, например, реестра.

    http://robvanderwoude.com/softwarerequirements.php — здесь рассказано, что смотреть в реестре.

    http://www.microsoft.com/technet/scriptcenter/resources/qanda/mar05/hey0309.mspx — здесь о просмотре версии IE.

  4. pan_2@LJ Says:

    ########################################################
    # Get-InternetExplorerVersionWMI.ps1

    function Get-InternetExplorerVersionWMI {
    param ($strComputer)

    $hklm = 2147483650
    $key = «SOFTWARE\Microsoft\Internet Explorer\»
    $value = «Version»
    $wmi2 = «\\»+$strComputer+»\root\default:stdRegProv»
    $wmi = [wmiclass]$wmi2
    $rpk = ($wmi.GetStringValue($hklm,$key,$value)).sValue

    $rpk
    }
    Get-InternetExplorerVersionWMI $args

  5. Konstantin Says:

    Или так:
    #Get-InternetExplorerVersionWMI.ps1
    $reg = Get-WmiObject -List -Namespace root\default -ComputerName $_ | Where-Object {$_.Name -eq «StdRegProv»}
    $HKLM=2147483650
    $ie = $reg.GetStringValue($HKLM,»SOFTWARE\Microsoft\Internet Explorer»,»Version»)
    $ie.sValue

  6. pan_2@LJ Says:

    Не-не-не. Там же ж $key, $value и $compname можно из $args брать😉 И будет универсальная читалка реестра по сети =)

  7. pan_2@LJ Says:

    И уж если сокращать:
    # Get-IEVer-WMI-oneliner.ps1
    # Get IE version through WMI in one line! (comments don’t count!) made by pan_2@LJ
    (([wmiclass]»\root\default:stdRegProv»).GetStringValue(2147483650,“SOFTWARE\Microsoft\Internet Explorer\”,“Version”)).sValue

  8. Konstantin Says:

    Согласен, я так собираю информацию о кодеках, DjVu и прочем, что через Windows Installer не всегда проходит, поэтому и $args столько.

  9. smilerz Says:

    прошу прощения пару вопросов,
    1. правильно понимаю, что скрипт под PSv2 ?
    2.как прикрутить Quest AD Cmdlets к PSv2 ?
    у меня выдается сообщение об ошибке
    The term ‘Get-QADComputer’ is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try agai
    n.

  10. smilerZ Says:

    прошу прощения пару вопросов,
    1. правильно понимаю, что скрипт под PSv2 ?
    2.как прикрутить Quest AD Cmdlets к PSv2 ?
    у меня выдается сообщение об ошибке
    The term ‘Get-QADComputer’ is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try agai
    n.

  11. Xaegr Says:

    smilerZ:
    1. Нет, этот скрипт вполне будет работать и в 1.0. Посты со скриптами требующими функционала 2.0 я стараюсь помечать соответствующей меткой.
    2. Точно так же как к 1.0. Вы видимо установили командлеты, но не подгрузили оснастку. Можно например выполнить команду get-pssnapin -registered | add-pssnapin чтобы подключить все установленные оснастки.

  12. smilerZ Says:

    Xaegr Спасибо.
    Пытаюсь сделать инвентаризацию ПО при загрузки машины с записью в SQL, при тестировании всех найденных мною вариантов получения списка ПО через

    Get-WmiObject win32_product

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

    Вы можете посоветовать, как можно сделать скрипт, который дает полный список установленного ПО.

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

    Заранее огромное спасибо.

  13. smilerz Says:


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


Обсуждение закрыто.

%d такие блоггеры, как: