Получение списка установленного ПО

На днях понадобилось оперативно собрать установленное ПО с клиентских компьютеров.
Времени для развертывания специального ПО не было, да и собственно самого ПО не было под рукой.
Почесав затылок и потыкав справку по работе с реестром из powershell получился скрипт который приведен чуть ниже.
Логика работы скрипта проста – подпихиваем файл hosts.txt, он в начале пытается пинговать хост, в случае успеха добавляет имя хоста в файл online.txt, в обратном случае в файл offline.txt.
Таким образом в файле offline.txt получается набор хостов которые не были протестированы по тем или иным причинам.
# version 0.4
$erroractionpreference = "SilentlyContinue"
# имена файлов
$hostFile = "hosts.txt"
$OnlineFile = "online.txt"
$OfflineFile = "offline.txt"
# создаем файлы
New-Item -ItemType File $OnlineFile -Force
New-Item -ItemType File $OfflineFile -Force
# получаем список хостов из файла
$colComputers = get-content $hostFile
# обходим все полученные имена с помощью foreach
foreach ($strComputer in $colComputers) {
$ping = new-object System.Net.NetworkInformation.Ping
$Reply = $ping.send($strComputer)
# производим ping хоста и в зависимости от результатов пишем в файл
if ($Reply.status –eq "Success") {
# для русской версии необходимо заменить "Success" на "Ответ от"
#if ($Reply.status –eq "Ответ от") {
Add-Content $OnlineFile $strComputer
} else {
Add-Content $OfflineFile $strComputer
}
$Reply = ""
}
# из тех что в онлайне делаем выборку
$hosts = Get-Content $OnlineFile
# Создаем Excel книгу
$Excel = New-Object -Com Excel.Application
$Excel.visible = $True
# работаем с Excel-ем
$Excel = $Excel.Workbooks.Add()
$wSheet = $Excel.Worksheets.Item(1)
$wSheet.Cells.item(1,1) = "HostName"
$wSheet.Cells.item(1,2) = "Verison"
$wSheet.Cells.Item(1,3) = "Publisher"
$wSheet.Cells.Item(1,4) = "UninstallString"
$wSheet.Cells.Item(1,5) = "Name"
$WorkBook = $wSheet.UsedRange
$WorkBook.Interior.ColorIndex = 8
$WorkBook.Font.ColorIndex = 11
$WorkBook.Font.Bold = $True
$intRow = 1
# проходим по списку хостов и получаем данные из ветки реестра $uninstallkey
foreach ($remoteHost in $hosts) {
$uninstallkey="Software\Microsoft\Windows\CurrentVersion\Uninstall"
$keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
$remotebase=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$remoteHost)
$regkey=$remotebase.OpenSubKey($uninstallkey)
# пишем данные в книгу excel
$regkey.GetSubKeyNames() | foreach {
$intRow++
$wSheet.Cells.Item($intRow,1) = $remoteHost
$wSheet.Cells.Item($intRow,2) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("DisplayVersion")
$wSheet.Cells.Item($intRow,3) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("Publisher")
$wSheet.Cells.Item($intRow,4) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("UninstallString")
$wSheet.Cells.Item($intRow,5) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("DisplayName")
}
}
$WorkBook.EntireColumn.AutoFit()
Похожие статьи
Приглашаю присоединиться ко мне в следующих сервисах:
Вы можете оставить комментарий.