Windows server узнать кто установил программу

В работе администратора часто возникает необходимость проверить, установлена ли на некотором компьютере в сети определённая программа и какой версии. Например, можно проверить, установлено ли важное обновление Windows или все ли рабочие станции имеют правильную версию Office.
Как это сделать с помощью командных файлов CMD (BAT) или скриптов (на примере VBScript), рассказывается далее.

Идея основана на том факте, что информация об установленных программах находится в системном реестре по адресу:
HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall

Указанная ветвь реестра перечисляет только программы, установленные «для всех пользователей», а программы «для этого пользователя» перечислены в ветви:
HKCUSoftwareMicrosoftWindowsCurrentVersionUninstall

В Windows x64 список программ сохраняется также в папке реестра:
HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall

Соответственно, для получения полного списка потребуется просканировать информацию из всех трёх ветвей реестра.

Способы открытия портов на Windows 10, 8, 7

Например, на VBScript:

Const HKLM = computer» strKey = «SOFTWAREMicrosoftWindowsCurrentVersionUninstall» strEntry1a = «DisplayName» strEntry1b = «QuietDisplayName» strEntry2 = «InstallDate» strEntry3 = «VersionMajor» strEntry4 = «VersionMinor» strEntry5 = «EstimatedSize» Set objReg = GetObject(«winmgmts://» _ «/root/default:StdRegProv») objReg.EnumKey HKLM, strKey, arrSubkeys WScript.Echo «Installed Applications (» «)» strSubkey, _ strEntry1a, strValue1) If intRet1 <> 0 Then objReg.GetStringValue HKLM, strKey > «» Then WScript.Echo VbCrLf Display Name: » strSubkey, _ strEntry2, strValue2 If strValue2 <> «» Then WScript.Echo «Install Date: » strSubkey, _ strEntry3, intValue3 objReg.GetDWORDValue HKLM, strKey > «» Then WScript.Echo «Version: » «.» strSubkey, _ strEntry5, intValue5 If intValue5 <> «» Then WScript.Echo «Estimated Size: » » megabytes» End If Next

Скрипт подключается к компьютеру с сетевым именем strComputer, просматривает раздел реестра SOFTWAREMicrosoftWindowsCurrentVersionUninstall и выводит информацию о программах.

Аналогичные действия можно выполнить в командном файле CMD. Этот командный файл выдаёт список программ:

Для проверки того, установлена ли конкретная программа (по названию) на каком-то одном компьютере, можно использовать следующий командный файл check-app-pc.cmd

Соответственно, команда check-app-pc.cmd KB2570791 ws_alex проверит, установлено ли обновление KB2570791 на компьютере WS_ALEX.
Теперь можно автоматизировать работу этого командного файла, добавив проверку большего количества компьютеров по списку. Для этого создаём командный файл check-app-pclist.cmd с циклом, перебирающим строчки текстового файла с сетевыми именами компьютеров.

Читайте также:
Windows 7 программе установки не удалось найти системный раздел

Майкрософт сняла ограничения для обновления до Windows 11?

Пример списка файлов pc.list

SERVER_DB SERVER_FILES WS_ALEX WS_RECEPTION

Теперь с помощью команды check-app-pclist.cmd KB2570791 pc.list можно проверить, установлено ли обновление KB2570791 на каждом компьютере, перечисленном в файле pc.list.

Источник: nhutils.ru

Можно ли узнать, когда и кем были установлено/удалено приложение в Windows?

Вообще да, сообщения от msiexec смотреть надо, но если журнал мелкий, а флуда много, скорее всего, они были стерты как слишком старые.

15 июл 2015 в 13:14
15 июл 2015 в 15:38

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

В общем случае нельзя. Создание файла с программой на диске, например, может затем сопровождаться подменой временнЫх меток файловой системы и т.п. В итоге никакой информации об истинном времени появления файла не будет, но установкой это вполне можно считать. Отдельные же случаи установки вполне могут оставлять достаточно информации для определения времени.

Отслеживать
ответ дан 15 июл 2015 в 13:35
Владимир Мартьянов Владимир Мартьянов
9,639 4 4 золотых знака 21 21 серебряный знак 35 35 бронзовых знаков
Да в реестр большинство инсталляторов прописывают дату.
15 июл 2015 в 15:07
В некоторых случаях: если есть инсталлятор и он что-то пишет в реестр.

15 июл 2015 в 15:33

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

Источник: ru.stackoverflow.com

Инвентаризация ПО в домене

Была задача провести инвентаризацию установленного в офисе ПО. Конечно есть много разного софта на эту тему, но их надо либо покупать, либо воровать.
Долгие поиски по сети привели меня сюда.
Отличный скрипт, отлично документирован, отлично работает.
Я не важно пишу скрипты, поэтому я решил допилить этот скрипт (а не выдумывать новый) под свои нужды.

Итак, в скрипт были внесены следующие изменения:
1. Отключены все диалоговые окна, так как процесс работы скрипта был утомительным ибо если компьютер из списка не доступен (а таких было много) приходилось часто щелкать мышью
2. Вывод недоступных компьютеров в отдельную папку в виде файла с именем этого компьютера (вывести в отдельный файл списком не получилось)
3. Выполнения скрипта для каждого компьютера из списка представленного тхт файлом
4. Добавление версии установленной программы
5. Отключение вывода не очень нужной для меня информации

Читайте также:
Программа как procreate на Windows

Исходник скрипта можно взять по ссылке, ниже я представлю на Ваш суд тот же скрипт но с моими изменениями.
Итак:
‘== НАСТРОЙКИ

‘настройки для инвентаризации программ
Const UPDATES = False ‘не учитывать обновления
Const TITLE = «Инвентаризация установленных программ» ‘заголовок диалоговых окон
Const DATA_DIR = «soft» ‘каталог для сохранения отчетов + «» в конце
Const Error_Dir = «Error» ‘ Каталог для файлов ошибок
‘Const DATA_DIR = «\SRVInventsoft» ‘сетевой ресурс для сохранения отчетов + «» в конце

‘настройки для инвентаризации обновлений
‘Const UPDATES = True ‘учитывать только обновления
‘Const TITLE = «Инвентаризация установленных обновлений» ‘заголовок диалоговых окон
‘Const DATA_DIR = «updates» ‘каталог для сохранения отчетов + «» в конце
‘Const DATA_DIR = «\SRVInventupdates» ‘сетевой ресурс для сохранения отчетов + «» в конце

‘прочие настройки
Const DATA_EXT = «.csv» ‘расширение файла отчета
Const SILENT = False ‘тихий режим отключен, будет запрошено имя компьютера
‘Const SILENT = True ‘режим отчета о локальном компьютере без вывода диалогов
Const HEAD_LINE = True ‘выводить заголовки в первой строке CSV-файла

‘не завершать скрипт аварийно
On Error Resume Next

‘Указываем файл-источник и необходимые переменные
Set FSO = CreateObject(«Scripting.FileSystemObject»)
Set File = FSO.GetFile(«Указать место откуда брать список компьютеров»)’ Список компьютеров
Set TextStream = File.OpenAsTextStream(1)
Str = vbNullString

‘Начало цикла перебора комьютеров

While Not TextStream.AtEndOfStream

‘глобальные переменные
Dim comp, wmio

‘узнать имя локального компьютера
Dim nwo
Set nwo = CreateObject(«WScript.Network»)
comp = LCase(nwo.ComputerName)

‘запросить имя удаленного компьютера
If Not SILENT Then
comp = TextStream.ReadLine()
‘проверить доступность компьютера
If Len(comp) > 0 And Unavailable(comp) Then

Set FSO1 = CreateObject(«Scripting.FileSystemObject»)
Set TextStream1 = FSO1.CreateTextFile(Error_Dir 0 Then InventSoft

‘если ошибка
If Len(Err.Description) > 0 Then

Set FSO1 = CreateObject(«Scripting.FileSystemObject»)
Set TextStream1 = FSO1.CreateTextFile(Error_Dir Err.Description,True) ‘Создаем файл с именем недоступного компьютера

End If
‘ Конец цикла
Wend

‘обращение к WMI оформлено в подпрограмму, чтобы можно было корректно обработать возможную ошибку
Sub InventSoft

Читайте также:
Установить программу ворд на Виндовс 7

‘подключить реестр удаленного компьютера через WMI
Set wmio = GetObject(«WinMgmts:!\» «Rootdefault:StdRegProv»)

‘создать файл отчета
Dim fso, tf
Set fso = CreateObject(«Scripting.FileSystemObject»)
If Not fso.FolderExists(DATA_DIR) Then
If Not SILENT Then MsgBox «Не найден каталог для сохранения отчета:» DATA_DIR, vbExclamation, TITLE
Exit Sub
End If
Set tf = fso.CreateTextFile(DATA_DIR DATA_EXT, True)

‘записать заголовки столбцов
If HEAD_LINE Then tf.WriteLine «Название и Версия»

‘искать программы и оформить текст для отчета
Dim s
s = ExtractSoft(«SOFTWAREMicrosoftWindowsCurrentVersionUninstall»)
If Len(s) > 0 Then tf.Write s

‘для 64-битных систем есть еще другой ключ! (32-битные программы на 64-битной системе)
s = ExtractSoft(«SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall»)
If Len(s) > 0 Then tf.Write s

‘закрыть файл отчета
tf.Close

‘проверить указанный ключ реестра; вернуть строку для записи в файл отчета
Function ExtractSoft(key)

‘получить коллекцию
Const HKLM = »
Exit Function
End If

‘отобрать нужные элементы
Dim s, item, ok, name, publ, inst, x, prev
s = «» ‘результат накапливать в строке
For Each item In items

ok = True ‘флаг продолжения

‘отделить заплатки, по значению параметра ParentKeyName = «OperatingSystem»
If ok Then
wmio.GetStringValue HKLM, key ParentKeyName», x
‘для программ
If UPDATES Then
If IsNull(x) Or x <> «OperatingSystem» Then ok = False
‘для обновлений
Else
If Not IsNull(x) And x = «OperatingSystem» Then ok = False
End If
End If

‘Версия
If ok Then
wmio.GetStringValue HKLM, key DisplayVersion», publ
If IsNull(publ) Or Len(publ) = 0 Then publ = «-»
End If

Next
ExtractSoft = s

‘проверить доступность компьютера в сети; вернуть True, если адрес недоступен
Function Unavailable(addr)
Dim wmio, ping, p
Set wmio = GetObject(«WinMgmts:»)
Set ping = wmio.ExecQuery(«SELECT StatusCode FROM Win32_PingStatus WHERE Address = ‘» «‘»)
For Each p In ping
If IsNull(p.StatusCode) Then
Unavailable = True
Else
Unavailable = (p.StatusCode <> 0)
End If
Next
End Function

Вот собственно и все. Сердечно благодарю автора скрипта Павела Железнова. Думаю в полной мере назвать эту статью плагиатом нельзя, и надеюсь это будет кому-то полезно.

З.Ы. Исходный скрипт, легко добавляется в групповые политики, и будет постоянно поддерживать актуальную информацию об установленном в сети ПО на Windows машинах.

З.З.Ы. На сайте автора, можно найти второй скрипт, который по результатам работы этого скрипта сформирует красивый отчет.

  • инвентаризация
  • скрипты

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru