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









Xaegr, подскажите тогда, пожалуйста, как вытащить информацию, например, о версии IE?
EE namespace :\root\cimv2\Applications\MicrosoftIE
Спасибо.
Комментарий от Konstantin — 17.5.2009 @ 14:16
Konstantin, откуда вы взяли этот namespace? Я его у себя на 2008R2 RC1 не нашел
Версию IE можно посмотреть например так:
(gi «$env:ProgramFiles\Internet Explorer\iexplore.exe»).versionInfo.productVersion
8.00.7100.0
Пойдёт?
Комментарий от Xaegr — 17.5.2009 @ 14:29
Подозреваю, что это выходит за рамки «простенькой инвентаризации», но…
В 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
########################################################
# 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
Или так:
#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
Не-не-не. Там же ж $key, $value и $compname можно из $args брать
И будет универсальная читалка реестра по сети =)
Комментарий от pan_2@LJ — 11.6.2009 @ 17:46
И уж если сокращать:
# 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
Согласен, я так собираю информацию о кодеках, DjVu и прочем, что через Windows Installer не всегда проходит, поэтому и $args столько.
Комментарий от Konstantin — 11.6.2009 @ 22:37
прошу прощения пару вопросов,
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
прошу прощения пару вопросов,
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
smilerZ:
1. Нет, этот скрипт вполне будет работать и в 1.0. Посты со скриптами требующими функционала 2.0 я стараюсь помечать соответствующей меткой.
2. Точно так же как к 1.0. Вы видимо установили командлеты, но не подгрузили оснастку. Можно например выполнить команду get-pssnapin -registered | add-pssnapin чтобы подключить все установленные оснастки.
Комментарий от Xaegr — 29.8.2009 @ 22:07
Xaegr Спасибо.
Пытаюсь сделать инвентаризацию ПО при загрузки машины с записью в SQL, при тестировании всех найденных мною вариантов получения списка ПО через
Get-WmiObject win32_product
Почему то выдается не полный список ПО, хотя в списке установленных программ она есть и в списке для удаления то же.
Могу лишь предположить что программа была установлена под другим пользователем или даже, до регистрации компьютера в домене.
Вы можете посоветовать, как можно сделать скрипт, который дает полный список установленного ПО.
Так же хочу уточнить при таком запросом обращение идет к реестру, если да, то к какой ветке, я могу проверить почему у меня часть программ не попадает.
Заранее огромное спасибо.
Комментарий от smilerZ — 29.8.2009 @ 22:21
…
Сдается впечатление, что мои сообщения публикуются только со второго раза
Комментарий от smilerz — 31.8.2009 @ 9:56