我们计划编写一个脚本,它将获得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 :(得分:-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
以供下次使用。