- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试获取所有已安装应用程序的列表,并希望构建一个可以启动这些应用程序的功能。
我正在使用这些 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 是 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/
我尝试了一些选项来迭代我的目录并在以下命令之间获得巨大的性能差异: 慢: Get-ChildItem -Directory -Force -Recurse -Depth 3 -Include '$tf
我今天才刚刚开始使用PowerShell,并且我有一个意向列表文件,其中包含数组中的一些模式,例如: $matchPattern = ( "SomeCompany.
我制作的 powershell 脚本有问题。该脚本的目的是从各种资源、CMDB og 和其他系统收集信息,并将它们收集在一个组合报告中并发送。 除了一个一直困扰我的提示外,我的一切工作正常。在我的脚本
我编写了一个脚本,用于从服务器归档日志文件。除了 Get-ChildItem 的递归性与否,我的一切都很好...... 我似乎遇到的问题是,当 Get-ChildItem 不是递归的并且 -Inclu
使用PowerShell 4.0, 我试图获取多个目录的大小,并且在Windows告诉我的内容和我的代码告诉我的内容之间却得到非常不一致的结果。 有问题的代码是: $temp4 = ($folderI
我正在使用Powershell脚本删除文件夹中的某些文件,然后将其余文件移到预定义的子文件夹中。 我的结构看起来像这样 Main (Contains a bunch of pdb and dl
我试图获取特定子文件夹结构中文件的递归列表,然后将它们保存到表中,以便可以使用foreach循环处理每一行。我有以下代码: $table = get-childitem -recurse | wher
大家好,我的文件夹结构如下 D:\Exclude Include Include1 Exclude Include 我需要的是我想过滤目录 In
我在 d: 下有 3 个 ps1 文件 -a--- 6/19/2015 2:52 PM 104 Untitled1.ps1
我们生成名称中带有日期的文件。(* 下面是日期的通配符)我想获取最后一个文件,并且包含该文件的文件夹的标题中也有一个日期(仅月份)。 我正在使用 PowerShell,并安排它每天运行。这是到目前为止
我要申请多个filter在 PowerShell 脚本中,截至目前我只能添加单个 filter像下面 Get-Childitem "D:\SourceFolder" -recurse -filter
我正在尝试使用CreationTime命令获取Lastwritetime和get-childitem,并将其与相同的汇编时间进行比较,以检查每5分钟是否有任何差异。 奇怪的是,如果程序集没有更改,并且
我写了一个Powershell脚本来检查文件夹的内容,以及是否有LastWriteTime早于20分钟的文件通知我。我遇到的问题是,当我得到结果时,它包括电子邮件正文中的所有文件。我将如何编写该信息以
这个问题在这里已经有了答案: PowerShell output is crossing between functions (1 个回答) 2年前关闭。 Powershell 版本信息如下: Nam
再次尝试使用 PowerShell 删除文件。 我现在正在尝试删除以“Export_”开头的文件,然后是两位数的年份,然后是儒略日期。例如,今天是 Export_18309。 18309 之后还有其他
我有两种使用通配符模式获取文件的方式: Get-ChildItem "$ActivityLogDirectory/*.csv" 和 Get-ChildItem "$ActivityLogDirecto
平台上的第一篇文章;-) 场景:我有一个根文件夹,其中包含带有安装相关文件的子文件夹。一些子文件夹包含更多子文件夹和更多文件,子子文件夹。根文件夹下的每个子文件夹或其子文件夹都必须包含一个特定文件。
我的问题与元过滤器上发布的问题几乎相同。 我需要使用 PowerShell 脚本来扫描大量文件。问题在于“Get-ChildItem”函数似乎坚持将整个文件夹和文件结构插入内存中。由于驱动器在 30,
我目前正在编写一个可视化错误 GUI,它可以在处理时捕获任何异常,并为用户提供“易于理解”的错误消息。但似乎在使用 Get-ChildItem 时我无法捕获任何异常小命令。我是否必须使用与 try/c
我正在编写一个遍历目录并复制其中的每个文件和文件夹的递归函数。我在函数中进行的第一项检查是查看传入的路径是否有子级。为了找出答案,我使用以下方法: [array]$arrExclude = @("Ex
我是一名优秀的程序员,十分优秀!