gpt4 book ai didi

windows - 如何从 Get-ChildItem 获取所有可执行文件的路径

转载 作者:行者123 更新时间:2023-12-02 15:53:15 26 4
gpt4 key购买 nike

我目前正在尝试获取所有已安装应用程序的列表,并希望构建一个可以启动这些应用程序的功能。

我正在使用这些 PowerShell 命令:

gci HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | % { Get-ItemProperty $_.PsPath } |选择显示名称、安装位置

gci HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | % { Get-ItemProperty $_.PsPath } |选择显示名称、安装位置

结合 ConvertTo-Json 以获得我可以使用的良好标准输出。现在,这只给我没有任何可执行文件的 InstallPath。

有什么简单的方法可以获取列表中应用程序的主要可执行文件吗?

预期结果( key 名称无关紧要):

    // ...
{
"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 个属性:

  • 名字
  • AppID

这变得很重要,因为 AppID 是 shell: 执行/启动程序所需的值。鉴于 Get-StartApps 的上述输出,您可以通过将 AppID 传递给 shell:\AppsFolder\"AppID" 来启动“Adobe Acrobat DC”。

Start-Process shell:AppsFolder\"{6D809377-6AF0-444B-8957-A3773F02200E}\Adobe\Acrobat DC\Acrobat\Acrobat.exe"

使用 @zett42's方法,我们可以查询您的开始菜单,以及 .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

不完全确定这就是您所追求的,但它可能对其他人有帮助。

关于windows - 如何从 Get-ChildItem 获取所有可执行文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71889181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com