我目前正在尝试获取所有已安装应用程序的列表,并希望构建一个可以启动这些应用程序的功能。
我正在使用这些 PowerShell 命令:
gci HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | % { Get-ItemProperty $_.PsPath } | Select DisplayName,InstallLocation
gci HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | % { Get-ItemProperty $_.PsPath } | Select DisplayName,InstallLocation
为了ConvertTo-Json
获得一个好的标准输出,我可以使用。现在,这只给了我没有任何可执行文件的 InstallPath。
有没有简单的方法来获取列表中应用程序的主要可执行文件?
预期结果(键名无关紧要):
// ...
{
"DisplayName": "Microsoft Edge",
"InstallLocation": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application",
"LaunchApplication": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\msedge.exe",
},
{
"DisplayName": "Audacity 2.4.2",
"InstallLocation": "C:\\Program Files (x86)\\Audacity\\",
"LaunchApplication": "C:\\Program Files (x86)\\Audacity\\audacity.exe"
},
// ...
就像其他人在评论中指出的那样,没有获取某些程序的可执行路径的常规方法。
为了回答您构建应用程序启动方法的间接问题,我们可以利用一些东西。对我们来说幸运的是,PowerShell 有一个Get-StartApps
cmdlet 可以生成当前用户安装的应用程序的输出:
Name AppID
---- -----
3D Viewer Microsoft.Microsoft3DViewer_8wekyb3d8bbwe!Microsoft.Microsoft3DViewer
AdGuard AdGuard
Adobe Acrobat DC {6D809377-6AF0-444B-8957-A3773F02200E}\Adobe\Acrobat DC\Acrobat\Acrobat.exe
Battle.net {7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Battle.net\Battle.net Launcher.exe
Blend for Visual Studio 2022 Blend.d58ce8bb
Calculator Microsoft.WindowsCalculator_8wekyb3d8bbwe!App
Calendar microsoft.windowscommunicationsapps_8wekyb3d8bbwe!microsoft.windowslive.calendar
显示 2 个属性:
shell:
这变得很重要,因为 AppID 是执行/启动程序所需的值。鉴于上述输出Get-StartApps
,您可以通过将 AppID 传递给 来启动“Adobe Acrobat DC” shell:\AppsFolder\"AppID"
。
Start-Process shell:AppsFolder\"{6D809377-6AF0-444B-8957-A3773F02200E}\Adobe\Acrobat DC\Acrobat\Acrobat.exe"
使用@zett42 的方法,我们可以查询您的开始菜单,以及系统开始菜单文件夹路径,以便.lnk使用 WScript COM 对象检索其目标路径:
$paths = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs","$env:APPDATA\Microsoft\Windows\Start Menu"
Get-ChildItem -Path $paths -Filter "*.lnk" -File -Recurse |
ForEach-Object -Begin {
$WScriptShell = New-Object -ComObject "WScript.Shell"
} -Process {
[PSCustomObject]@{
Name = $_.BaseName
Path = $WScriptShell.CreateShortcut($_.FullName).TargetPath
}
} -End {
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($WScriptShell) #release COM object
}
这将输出:
Name Path
---- ----
Adobe Acrobat DC C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe
Blend for Visual Studio 2022 C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Blend.exe
Firefox C:\Program Files\Mozilla Firefox\firefox.exe
Google Chrome C:\Program Files\Google\Chrome\Application\chrome.exe
Microsoft Edge C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
TechPowerUp GPU-Z C:\Program Files (x86)\GPU-Z\GPU-Z.exe
不完全确定这是您所追求的,但它可能对其他人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句