我想获取 Office 2019 的 DisplayName“Microsoft Office Professional Plus 2019 - en-us”并回显它。
我使用 powercell 命令找到了 cmd 命令。
Powershell /command "Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ProPlus2019Volume* | Select-Object DisplayName"
DisplayName
-----------
Microsoft Office Professional Plus 2019 - en-us
如何使用命令行“for”检测它?(您也可以使用“reg query”代替powershell。)
答案1
假设您的实际意图是使用一组名称模式来获取已安装应用程序名称的列表,那么这将执行此操作。它还假定应用程序是通过通常的方法安装的,例如使用 MSI 文件或包管理。[咧嘴笑]
代码 ...
$PackageProviderList = @(
'msi'
'programs'
)
$TargetAppList = @(
'libreoffice*'
'microsoft visual c*'
)
$FoundAppList = (Get-Package -ProviderName $PackageProviderList -Name $TargetAppList).Name |
Sort-Object
$FoundAppList
此时我的系统上的输出...
LibreOffice 7.2 Help Pack (English (United States))
LibreOffice 7.2.2.2
Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.30.30704
Microsoft Visual C++ 2015-2022 Redistributable (x86) - 14.30.30704
Microsoft Visual C++ 2022 X64 Additional Runtime - 14.30.30704
Microsoft Visual C++ 2022 X64 Minimum Runtime - 14.30.30704
Microsoft Visual C++ 2022 X86 Additional Runtime - 14.30.30704
Microsoft Visual C++ 2022 X86 Minimum Runtime - 14.30.30704
代码的作用是什么……
- 建立所需提供商类型的列表,
我并不想从msu
、nuget
或获得东西powershellget
。 - 建立一个要查找的已安装事物的列表,
它使用通配符来避免必须提前知道目标名称。 - 运行
Get-Package
以获取匹配的安装列表 .Name
从结果中的属性中获取值- 对列表进行排序
- 将其存储在 $Var 中
- 在屏幕上显示该列表
答案2
set Office2019ProductReg="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ProPlus2019Volume - en-us"
for /f "usebackq tokens=1-2*" %%a in (`"reg query %Office2019ProductReg% /v DisplayName|find /i "DisplayName""`) do (
set office_ProductName=%%c
)