[玩转系统] PowerShell 检查软件是否已安装 [2 种方法]
作者:精品下载站 日期:2024-12-14 05:29:14 浏览:16 分类:玩电脑
PowerShell 检查软件是否已安装 [2 种方法]
将 Get-Package
与 Select-Object
Cmdlet 结合使用
将 Get-Package
与 Select-Object
cmdlet 结合使用来检查是否安装了指定的软件。
将 Get-Package 与 Select-Object Cmdlet 结合使用:
$software = "Java(TM) SE Development Kit 18.0.2.1 (64-bit)"
Get-Package | Where-Object { $_.Name -eq $software } | Select-Object Name, Version
输出 :
Java(TM) SE Development Kit 18.0.2.1 (64-bit)
首先,我们声明并初始化了一个名为 $software
的变量,其中包含我们想要检查的软件的完整名称。
接下来,我们使用 Get-Package cmdlet 检索本地计算机上安装的所有软件包的列表;所有这些包都通过管道传输到Where-Object cmdlet,该cmdlet检查Name
属性是否等于$software
变量的值;如果是,则将结果通过管道传输到 Select-Object
cmdlet,该 cmdlet 从中选择指定的 $software
并返回它们;否则,不显示任何内容。
我们还可以在远程计算机上运行 Get-Package
cmdlet,方法是将其作为 Invoke-Command
cmdlet 或 Enter-PSSession
cmdlet 的一部分执行或脚本。
我们还可以检查提供商提供的特定软件的所有版本。我们使用带有 -ProviderName
和 -AllVersions
参数的 Get-Package
cmdlet。
将 Get-Package 与 -ProviderName 和 -AllVersions 结合使用:
Get-Package -Name "Python*"-ProviderName msi -AllVersions
输出 :
Name Version Source ProviderName
---- ------- ------ ------------
Python Launcher 3.11.7966.0 msi
Python 3.11.0 Standard Libr... 3.11.150.0 msi
Python 3.11.0 Core Interpre... 3.11.150.0 msi
Python 3.10.6 Add to Path (... 3.10.6150.0 msi
Python 3.11.0 Utility Scrip... 3.11.150.0 msi
Python 3.10.6 Standard Libr... 3.10.6150.0 msi
Python 3.10.6 Test Suite (6... 3.10.6150.0 msi
Python 3.11.0 Tcl/Tk Suppor... 3.11.150.0 msi
Python 3.10.6 Executables (... 3.10.6150.0 msi
Python 3.10.6 Utility Scrip... 3.10.6150.0 msi
Python 3.11.0 Documentation... 3.11.150.0 msi
Python 3.10.6 Documentation... 3.10.6150.0 msi
Python 3.11.0 Test Suite (6... 3.11.150.0 msi
Python 3.10.6 Tcl/Tk Suppor... 3.10.6150.0 msi
Python 3.10.6 Core Interpre... 3.10.6150.0 msi
Python 3.11.0 pip Bootstrap... 3.11.150.0 msi
Python 3.10.6 Development L... 3.10.6150.0 msi
Python 3.11.0 Add to Path (... 3.11.150.0 msi
Python 3.11.0 Executables (... 3.11.150.0 msi
Python 3.10.6 pip Bootstrap... 3.10.6150.0 msi
Python 3.11.0 Development L... 3.11.150.0 msi
我们已经了解了Get-Package;在这里,我们使用此 cmdlet 和 -ProviderName
参数来提及提供程序的名称,在上面的示例中为 msi
。接下来,我们使用 -Name
参数来提及软件的名称;然而,以 *
表示的通配符运算符用于获取以 Python
一词开头的所有软件。
接下来,我们使用 -AllVersions 参数来检索本地计算机上安装的所有软件版本。默认情况下,Get-Package
cmdlet 返回最新的可用版本。要列出特定的软件版本,我们使用 -RequiredVersion
后跟版本号。请参阅以下示例以获得清晰的理解。
将 Get-Package 与 -ProviderName 和 -RequiredVersion 结合使用:
Get-Package -Name "Python*"-ProviderName msi -RequiredVersion 3.11.150.0
输出 :
Name Version Source ProviderName
---- ------- ------ ------------
Python 3.11.0 Standard Libr... 3.11.150.0 msi
Python 3.11.0 Core Interpre... 3.11.150.0 msi
Python 3.11.0 Utility Scrip... 3.11.150.0 msi
Python 3.11.0 Tcl/Tk Suppor... 3.11.150.0 msi
Python 3.11.0 Documentation... 3.11.150.0 msi
Python 3.11.0 Test Suite (6... 3.11.150.0 msi
Python 3.11.0 pip Bootstrap... 3.11.150.0 msi
Python 3.11.0 Add to Path (... 3.11.150.0 msi
Python 3.11.0 Executables (... 3.11.150.0 msi
Python 3.11.0 Development L... 3.11.150.0 msi
如果您想知道本地计算机上安装了哪些软件包(软件),我们只需运行 Get-Package
cmdlet,如下所示。它将显示软件的名称
、版本
、源
和ProviderName
;请参阅以下输出。
使用获取包 Cmdlet:
Get-Package
输出 :
Name Version Source ProviderName
---- ------- ------ ------------
Greenshot 1.2.10.6 1.2.10.6 Programs
Office 16 Click-to-Run Exte... 16.0.16130.20218 msi
Office 16 Click-to-Run Lice... 16.0.16130.20218 msi
Microsoft Update Health Tools 3.70.0.0 msi
Apache NetBeans IDE 15 15 Programs
Node.js 18.12.1 msi
Microsoft Visual C++ 2019 X... 14.28.29325 msi
Microsoft Visual C++ 2019 X... 14.28.29325 msi
Java(TM) SE Development Kit... 18.0.2.1 C:\Program Files\Java\jdk-18.... msi
... ... ... ...
... ... ... ...
... ... ... ...
您可能需要找出指定软件的安装位置;在这种情况下,我们将 Get-Package
与 Select-Object
cmdlet 结合使用,如下所示。
将 Get-Package 与 Select-Object Cmdlet 结合使用:
$software = "Java(TM) SE Development Kit 18.0.2.1 (64-bit)"
Get-Package -Name $software | Select-Object -ExpandProperty Source
输出 :
C:\Program Files\Java\jdk-18.0.2.1\
我们已经了解了Get-Package
和Select-Object
;新的东西是 -ExpandProperty
参数,我们用它来指定我们想要选择的属性。因此,例如,在上面的代码围栏中,我们选择了 source
属性来了解指定 $software
的安装位置。
将 Get-WmiObject
与 Select-Object
Cmdlet 结合使用
将 Get-WmiObject
与 Select-Object
cmdlet 结合使用来检查是否安装了指定的软件。
将 Get-WmiObject 与 Select-Object 结合使用:
$software = "Java(TM) SE Development Kit 18.0.2.1 (64-bit)"
Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -eq $software } | Select-Object $software
输出 :
Java(TM) SE Development Kit 18.0.2.1 (64-bit)
此示例与上一节中的第一个示例类似,但我们在上面的代码片段中使用了带有 -Class
参数的 Get-WmiObject
cmdlet。此 cmdlet 检索 WMI(Windows 管理规范)类的所有实例或有关可用类的信息。
将此 cmdlet 用作 Get-WmiObject -Class Win32_Product
返回使用 WMI 的 Windows 系统上所有已安装软件的列表。我们可以在任何安装了 PowerShell 的 Windows 系统上运行此命令,并获取所有已安装软件包的详细信息,包括软件的名称、供应商、版本和其他重要信息。
请记住,使用 Get-WmiObject
可能会很慢并且占用资源,特别是当我们的系统安装了许多软件/软件包时。为什么慢?这是因为它必须查询 WMI 数据库以查找每个已安装的软件。此外,很少有防病毒软件会将其识别为恶意命令,因为恶意软件经常使用它来收集有关特定系统上已安装软件包的信息。您必须小心使用此功能,并且只能在受信任的系统上使用。
现在,我们修改上面的代码,如下所示。
将 Get-WmiObject 与 Select-Object 结合使用:
$software = "Java(TM) SE Development Kit 18.0.2.1 (64-bit)"
$result = Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name = '$software'"
if ($result -ne $null){
Write-Host "'$software' is installed."
}
else{
Write-Host "'$software' is not installed."
}
输出 :
'Java(TM) SE Development Kit 18.0.2.1 (64-bit)' is installed.
在这里,我们使用 Get-WmiObject
命令返回的值初始化 $result
变量。接下来,我们使用带有 -ne
运算符的 if
语句来检查 $result
是否不等于 $null
代码>;如果没有,我们使用 Write-Host
显示一条自定义消息,通知指定的软件已安装;否则,else
块将被执行。
现在我们知道了 Get-WmiObject
cmdlet、我们为什么使用它以及它返回什么。让我们使用另一个代码示例,但这次带有函数。
Get-WmiObject 如何查询数据库的演示:
function Check_Software_Installed( $software ) {
$wmi_check = (Get-WmiObject -Query "SELECT * FROM Win32_Product Where Name='$software'")
return $wmi_check;
}
Check_Software_Installed("Java(TM) SE Development Kit 18.0.2.1 (64-bit)")
输出 :
IdentifyingNumber : {F3A2A837-F83B-5732-97F2-309BE0F51E0C}
Name : Java(TM) SE Development Kit 18.0.2.1 (64-bit)
Vendor : Oracle Corporation
Version : 18.0.2.1
Caption : Java(TM) SE Development Kit 18.0.2.1 (64-bit)
我们得到了 Vendor
、Version
、Caption
、Name
和 IdentifyingNumber
因为我们使用了SQL SELECT
命令中的 *
。因此,我们可以获得所有已安装软件包的相同信息,如下所示。
使用 Get-WmiObject Cmdlet:
Get-WmiObject -Class Win32_Product
输出 :
IdentifyingNumber : {89581302-705F-42C5-99B0-E368A845DAD5}
Name : Microsoft Update Health Tools
Vendor : Microsoft Corporation
Version : 3.70.0.0
Caption : Microsoft Update Health Tools
IdentifyingNumber : {7B9BAA62-C960-4309-A639-28FC9877FF68}
Name : Node.js
Vendor : Node.js Foundation
Version : 18.12.1
Caption : Node.js
IdentifyingNumber : {F3A2A837-F83B-5732-97F2-309BE0F51E0C}
Name : Java(TM) SE Development Kit 18.0.2.1 (64-bit)
Vendor : Oracle Corporation
Version : 18.0.2.1
Caption : Java(TM) SE Development Kit 18.0.2.1 (64-bit)
... ...
... ...
... ...
使用 Get-ChildItem
Cmdlet
要在 PowerShell 中检查所有已安装的软件:
- 使用
Get-ChildItem
cmdlet 查询注册表以检索所有已安装软件包(软件)的列表。 - 使用
ForEach
循环遍历已安装软件包的列表。 在每次迭代中:
- 使用
Write-Host
三次来显示软件的DisplayName
、分隔符和DisplayVersion
。
- 使用
使用 Get-ChildItem Cmdlet:
$installedSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
foreach($object in $installedSoftware){
Write-Host $object.GetValue('DisplayName') -NoNewline;
Write-Host " - " -NoNewline;
Write-Host $object.GetValue('DisplayVersion')
}
输出 :
Greenshot 1.2.10.6 - 1.2.10.6
Apache NetBeans IDE 15 - 15
Notepad++ (64-bit x64) - 8.4.4
Microsoft 365 Apps for enterprise - en-us - 16.0.16130.20218
Microsoft OneDrive - 23.038.0219.0001
R for Windows 4.2.1 - 4.2.1
WinRAR 6.11 (64-bit) - 6.11.0
XAMPP - 8.1.6-0
Python 3.10.6 Development Libraries (64-bit) - 3.10.6150.0
Python 3.11.0 pip Bootstrap (64-bit) - 3.11.150.0
Python 3.10.6 Test Suite (64-bit) - 3.10.6150.0
Python 3.10.6 Utility Scripts (64-bit) - 3.10.6150.0
Python 3.11.0 Core Interpreter (64-bit) - 3.11.150.0
Microsoft Visual C++ 2019 X64 Additional Runtime - 14.28.29325 - 14.28.29325
Typora 1.4 - 1.4.3
Python 3.10.6 pip Bootstrap (64-bit) - 3.10.6150.0
Python 3.10.6 Documentation (64-bit) - 3.10.6150.0
Python 3.10.6 Add to Path (64-bit) - 3.10.6150.0
Oracle VM VirtualBox 7.0.6 - 7.0.6
Windows PC Health Check - 3.6.2204.08001
Python 3.11.0 Tcl/Tk Support (64-bit) - 3.11.150.0
Python 3.11.0 Development Libraries (64-bit) - 3.11.150.0
Python 3.10.6 Executables (64-bit) - 3.10.6150.0
Node.js - 18.12.1
Microsoft Visual C++ 2019 X64 Minimum Runtime - 14.28.29325 - 14.28.29325
Update for Windows 10 for x64-based Systems (KB5001716) - 4.91.0.0
Microsoft Update Health Tools - 3.70.0.0
Office 16 Click-to-Run Licensing Component - 16.0.16130.20218
Office 16 Click-to-Run Extensibility Component - 16.0.16130.20218
Python 3.10.6 Tcl/Tk Support (64-bit) - 3.10.6150.0
Python 3.11.0 Add to Path (64-bit) - 3.11.150.0
Python 3.11.0 Executables (64-bit) - 3.11.150.0
ScreenToGif - 2.37.1
Python 3.11.0 Utility Scripts (64-bit) - 3.11.150.0
Python 3.10.6 Standard Library (64-bit) - 3.10.6150.0
Python 3.10.6 Core Interpreter (64-bit) - 3.10.6150.0
Python 3.11.0 Standard Library (64-bit) - 3.11.150.0
Python 3.11.0 Documentation (64-bit) - 3.11.150.0
Python 3.11.0 Test Suite (64-bit) - 3.11.150.0
Java(TM) SE Development Kit 18.0.2.1 (64-bit) - 18.0.2.1
我们使用 Get-ChildItem 查询注册表并获取本地计算机上所有已安装的软件。我们将此列表存储在 $installedSoftware
变量中,并与 ForEach
循环一起使用。该循环遍历 $installedSoftware
,并且我们对列表中的每个元素使用 Write-Host
cmdlet 三次。
首先,Write-Host
用于打印使用 GetValue()
方法检索到的当前软件的 DisplayName
。第二个 Write-Host
cmdlet 用于打印分隔符;我们使用了-
;您可以使用您的任何选择。第三,Write-Host
打印了当前软件的DisplayVersion
,这是我们通过GetValue()
方法获得的。最后,使用-NoNewLine
不插入换行符。
上面的代码列出了本地计算机上安装的所有软件,但应用程序也可以按用户安装。因此,要获取当前登录用户的软件列表,我们必须将 HKLM
更改为 HKCU
,如下所示。因此,这里,LM
表示本地计算机,而 CU
表示当前用户。
使用 Get-ChildItem Cmdlet:
$installedSoftware = Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
foreach($object in $installedSoftware){
Write-Host $object.GetValue('DisplayName') -NoNewline;
Write-Host " - " -NoNewline;
Write-Host $object.GetValue('DisplayVersion')
}
输出 :
Microsoft Teams - 1.5.00.21668
Zoom - 5.13.3 (11494)
Python 3.10.6 (64-bit) - 3.10.6150.0
Telegram Desktop - 4.4
Microsoft Visual Studio Code (User) - 1.74.3
Python 3.11.0 (64-bit) - 3.11.150.0
要以表格形式获取信息,我们可以使用以下解决方案。
将 Get-ItemProperty Cmdlet 与 Select-Object 结合使用:
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table -AutoSize
输出 :
DisplayName DisplayVersion Publisher InstallDate
----------- -------------- --------- -----------
Google Chrome 111.0.5563.64 Google LLC 20230310
Microsoft Edge 110.0.1587.63 Microsoft Corporation 20230304
Microsoft Edge WebView2 Runtime 110.0.1587.63 Microsoft Corporation 20230306
Python Launcher 3.11.7966.0 Python Software Foundation 20221108
Teams Machine-Wide Installer 1.5.0.8070 Microsoft Corporation 20220916
... ... ... ...
... ... ... ...
我们使用 Get-ItemProperty cmdlet 检索所选对象的 DisplayName
、DisplayVersion
、Publisher
、InstallDate
属性。相比之下,Format-Table
cmdlet 用于以表格格式显示接收到的数据。
这就是如何检查软件是否已安装的全部内容。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag