2014-08-02 2 views
0

Мы планируем написать сценарий, который получит все программное обеспечение, установленное в системе Windows, и сравните с перечнем, который мы перечислили, и отправим результат по почте.Сценарий Чтобы найти установленное программное обеспечение

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

for /f "tokens=*" %%i in (D:\BatchScript\ListeProgs.txt) do echo %%i >>D:\BatchScript\newfile.txt 
@echo off > D:\BatchScript\installed-programs.csv 
regedit /e D:\BatchScript\regexport.txt "HKEY_LOCAL_MACHINE\Software\MicrosoftWindows\CurrentVersion\Uninstall" 
find "DisplayName" <D:\BatchScript\regexport.txt> D:\BatchScript\regprogs.txt 
for /f "tokens=enter code here2 delims==" %%a in (D:\BatchScript\regprogs.txt) do (
echo %%~a >>D:\BatchScript\installedprogs.txt) 
for /f "tokens=*" %%L in (D:\BatchScript\installedprogs.txt) do (
call :sub1 %%L) 
goto :eof 
:sub1 
>> installed-programs.csv echo %1,%2,%3,%4,%5,%6,%7,%8,%9 
::== DONE 
+0

Я сделал это с powershell некоторое время назад. Позвольте мне найти сценарий – Alireza

+0

еще один способ получить установленное программное обеспечение: 'wmic product get caption' (также не полный, но, возможно, он помогает заполнить некоторые пробелы) – Stephan

+0

@ user2693302 - это powershell OK? – Alireza

ответ

-1

Это сценарий, который поможет решить вашу проблему.

После выполнения этого кода в Powershell, вы получите функции с именем Get-InstalledAppsDifferences:

function Get-InstalledAppsDifferences { 
    Process { 
     Get-WmiObject -Class Win32_Product | Select-Object -Property Name | Sort-Object -Property Name -Unique > c:\LatestList.txt 
     IF (Test-Path C:\PreviousList.txt) 
     { 
      Compare-Object -ReferenceObject (Get-Content C:\latestList.txt) -DifferenceObject (Get-Content C:\PreviousList.txt) > "C:\Diff_$(get-date -f yyyy-MM-dd).txt" 
      Remove-Item C:\PreviousList.txt -Force 
     } 
     Move-Item C:\LatestList.txt C:\PreviousList.txt 
    } 
} 

Для запуска функции в PowerShell:

Get-InstalledAppsDifferences 

Функция генерирует список установленных программ в C:\LatestList.txt затем ищет файл с именем C:\PreviousList.txt, если найденный создает отличия и сохраняет в имени файла C:\Diff_yyyy-mm-dd.txt и удаляет предыдущий список.

В конце он переименовывает LatestList.txt в PreviousList.txt для следующего использования.

+0

Но возможно, что программное обеспечение может быть установлено, которое не будет возвращено Win32_Product, не так ли? – alroc

+0

Я никогда не сталкивался с такой проблемой, но если у вас есть специальный случай или документация, в котором говорится об этом, я буду этому благодарен :) – Alireza

+0

Он перечисляет только программное обеспечение, установленное MSI, и [по-видимому, очень медленно] (http://sdmsoftware.com/group-policy-blog/wmi/why-win32_product-is-bad-news /) – alroc

Смежные вопросы