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

Powershell Logo

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

Логика работы скрипта проста – подпихиваем файл hosts.txt, он в начале пытается пинговать хост, в случае успеха добавляет имя хоста в файл online.txt, в обратном случае в файл offline.txt.

Таким образом в файле offline.txt получается набор хостов которые не были протестированы по тем или иным причинам.

# get-Applications.ps1
# 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()

Буду благодарен, если поделитесь этой статьей:

Приглашаю присоединиться ко мне в следующих сервисах:
facebook Google Plus вКонтакте Twitter
Если Вам понравилась статья, то вы можете подписаться на RSS. А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.
Получать обновления на email

Вы можете оставить комментарий.

Добавить комментарий

XHTML: Вы можете использовать тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>