已安装的所有程序的列表。不仅限于那些带有卸载程序的程序

已安装的所有程序的列表。不仅限于那些带有卸载程序的程序

我一直在尝试获取 Windows 10 上安装的所有内容的列表。WMIC 和 powershell 都没有返回完整列表。

例如,Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall* | Select-Object DisplayName、DisplayVersion、Publisher、InstallDate | Format-Table –AutoSize

仅返回在卸载注册表中有条目的项目。

get-ciminstance win32_product |select-object name,installlocation 与上面的相同。

Wmic 产品获取名称,安装位置给我一个不同的列表,其中有一些交叉。

内容:我正在尝试从批处理脚本创建一个文本文件,其中包含所有内容的列表。我特别需要程序的名称和安装路径。

我尝试创建的输出文件将包含用户名、程序名称和路径。

原因:我有一个自动化脚本,在全新安装 Windows 后运行,如果磁盘上存在程序,它会导入注册表项。程序,更重要的是游戏,可能位于不同的驱动器上。用户通常有多个驱动器用于程序和游戏,在一个案例中,使用 4 个不同的驱动器。

因此,如果用户 A 在驱动器 D; 上有 Doom,用户 B: 有它在 E: 上,而用户 C 有它在 F: 上,我想知道在哪里查找该用户的程序/游戏路径

因此,如果找到路径,则导入任何注册表项,如果有任何程序数据、本地应用程序数据或应用程序数据文件夹,则复制它们。这可以节省从头开始重新安装的时间,并保留游戏保存(对于本地存储的保存)和注册表设置等。

不幸的是,有些程序不存储路径,或者路径位于该程序专用的注册表项中。我猜会有一些手动处理输出。

这是我在每个驱动器上执行 dir *. /s/b >folders.txt 然后手动编辑所有子文件夹的子文件夹并复制和粘贴程序名称所得到的结果

Far Cry Primal,D:\Program Files (x86)\Far Cry Primal
Star Wars Jedi - Fallen Order,D:\Program Files (x86)\Star Wars Jedi - Fallen Order
The Sims 4 Island Living,D:\Program Files (x86)\The Sims 4 Island Living
Valorant,D:\Program Files (x86)\Valorant
Apex,D:\Program Files (x86)\Origin Games\Apex
Portal 2,D:\Program Files (x86)\Valve\Portal 2
Cities Skylines,I:\Games\Cities Skylines Mass Transit
SWKotor,I:\Program Files\LucasArts\SWKotOR
Command and Conquer Remastered Collection,I:\Program Files (x86)\Command and Conquer Remastered Collection
Mass Effect,I:\Program Files (x86)\Mass Effect
Mass Effect Andromeda,I:\Program Files (x86)\Mass Effect Andromeda
Minecraft,I:\Program Files (x86)\Minecraft
Serious Sam 3 BFE,I:\Program Files (x86)\Serious Sam 3 BFE
Star Wars - Galactic Battlegrounds,I:\Program Files (x86)\Star Wars -     Galactic Battlegrounds
Doom 3 BFG Edition,I:\Program Files (x86)\Bethesda Softworks\Doom 3 BFG Edition

有没有办法通过命令行完成所有这些操作?此列表的创建将通过备份脚本完成,该脚本将保存所有内容,以便在重新安装 Windows 后进行恢复。

或者也许有其他方法知道在哪里检查和恢复东西?

感谢你的协助。

答案1

通常程序是从 MSI、EXE 和 Chocolatey 安装的。Powershell CMDLets 可以帮助您查看它们。一行代码即可完成此操作(在 gridview 中显示所有属性):

Get-Package | 
  Where-Object {$_.ProviderName -in @('Programs','msi','chocolatey')} | 
    Select-Object * | 
      Out-GridView -Title "Installed Programs"

还有更多提供商,如 NuGet、PowershellGet 或 Microsoft Update (msu)。

最重要的属性是:

  • 姓名:程序名称。
  • 快速包参考:卸载字符串,或者注册表项引用 QuietUninstallString。
  • 提供者名称:提供商名称。
  • 标记文本:XML 格式的有用信息。
  • 版本:版本号
  • 来源:安装位置

还有许多属性,请参阅 GridView。您可以使用它们Select-Object来排序、选择和过滤属性。以下是仅六个重要属性的示例:

Get-Package | 
  Where-Object {$_.ProviderName -in @('Programs','msi','chocolatey')} | 
    Select-Object Name,FastPackageRefernce,ProviderName,Version,Source,SwidTagText | 
      Out-GridView -Title "Installed Programs"

Out-Gridview如果愿意的话,可以省略。

答案2

几十年来,我一直把所有程序都安装在第二个硬盘上。随着时间的推移,我发现,即使在全新安装后,如果我只是从该程序的安装文件夹中启动相应程序的相应 *.exe 文件,大多数程序都可以正常运行。

至于设置,您可以尝试使用 Live CD 将旧安装的整个用户文件夹简单地复制回新安装的用户文件夹。此后,以前安装的大多数程序设置也应该会再次出现。

另外,还有一个名为Martau Total Uninstall,我也已经使用了几十年了。

Total Uninstall 可以读取已安装程序的所有文件和注册表项,即使在安装和使用程序后也可以读取,并将其导出为 ZIP 存档。然后可以将此存档在新的 Windows 安装上恢复或者甚至在另一台电脑上,这样程序及其所有设置就可以再次正常工作。

相关内容