PowerShell и другие скрипты

15.5.2009

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

Рубрика: Active Directory, PowerShell, Scripting, Tips, Utility — Метки: , , , , — Xaegr @ 10:38

Захотелось тут одному начинающему “автоматизатору” получить данные об установленном на компьютерах сети программном обеспечении, для последующей обработке в 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)

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

    Комментарий от Konstantin — 17.5.2009 @ 14:16

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

    Комментарий от Xaegr — 17.5.2009 @ 14:29

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

    В 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.

    Комментарий от Konstantin — 17.5.2009 @ 15:55

  4. ########################################################
    # 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

    Комментарий от pan_2@LJ — 11.6.2009 @ 6:35

  5. Или так:
    #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

    Комментарий от Konstantin — 11.6.2009 @ 9:58

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

    Комментарий от pan_2@LJ — 11.6.2009 @ 17:46

  7. И уж если сокращать:
    # 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

    Комментарий от pan_2@LJ — 11.6.2009 @ 17:53

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

    Комментарий от Konstantin — 11.6.2009 @ 22:37

  9. прошу прощения пару вопросов,
    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.

    Комментарий от smilerz — 26.8.2009 @ 18:17

  10. прошу прощения пару вопросов,
    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.

    Комментарий от smilerZ — 29.8.2009 @ 22:01

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

    Комментарий от Xaegr — 29.8.2009 @ 22:07

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

    Get-WmiObject win32_product

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

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

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

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

    Комментарий от smilerZ — 29.8.2009 @ 22:21


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

    Комментарий от smilerz — 31.8.2009 @ 9:56


RSS-лента комментариев к этой записи.

Извините, обсуждение на данный момент закрыто.

Блог на WordPress.com.