脚本查找已安装的软件

时间:2014-08-02 10:00:47

标签: windows batch-file powershell

我们计划编写一个脚本,它将获得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

1 个答案:

答案 0 :(得分:-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以供下次使用。