现有回答中有一些有用的信息,但让我试着将这些信息整合在一起,同时提供自动化的步骤。
本回答假设存在特定于应用程序的URI协议。 如果对于给定的应用程序不存在此类协议,请使用接受的答案中显示的shell:
URI方案来调用它(直接将此类URI传递给Start-Process
即可;例如:
Start-Process shell:AppsFolder\Microsoft.WindowsAlarms_8wekyb3d8bbwe!App
)。请注意,您需要知道应用程序系列名称,其中包括抽象出版商ID(8wekyb3d8bbwe
);
Get-AppXPackage
可以帮助您进行发现 - 请参见下面的内容。
Windows 8+Metro风格的应用程序(过时的术语)也称为UWP应用程序 / AppX软件包 / Microsoft Store应用程序,最好使用应用程序特定的协议方案的URL进行启动:
例如,Windows 10的计算器应用程序定义了两个URL协议名,calculator
和ms-calculator
,这两者都可以在使用带有:
的Start-Process
时使用:
Start-Process calculator:
Microsoft Edge支持多种协议,其中包括microsoft-edge
,因此您可以按照以下方式在Edge中打开给定的URL(例如http://example.org
):
Start-Process microsoft-edge:http://example.org
请注意,在此示例中,协议名称后的
:
后跟一个要传递给目标应用程序的
参数。
警告:截至PowerShell(Core)7.2版本,许多AppX应用程序无法使用
-Wait
和
-PassThru
参数启动,请参见
GitHub问题#10996。
挑战在于如何通过应用程序名称(包名称)发现给定应用程序的协议名称。
以下部分讨论了可以在注册表中找到此信息的位置,并定义了辅助函数
GetAppXUriProtocol
,该函数自动完成此发现,允许您针对应用程序使用
通配符表达式,如果不知道确切的包名称(这是典型的情况)。
例如,您可以按如下方式找到计算器应用程序的协议名称:
PS> Get-AppXUriProtocol *calculator*
PackageFullName Protocols
--------------- ---------
Microsoft.WindowsCalculator_10.1908.0.0_x64__8wekyb3d8bbwe {calculator, ms-calculator}
那就是说,你可以使用Start-Process calculator:
或者Start-Process ms-calculator:
来启动计算器应用程序。
如果您只想获取有关AppX包的信息 - 不包括协议名称 - 请使用标准的Get-AppXPackage
cmdlet,例如:
PS> Get-AppXPackage *calculator*
Name : Microsoft.WindowsCalculator
Publisher : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
...
发现AppX应用程序的URL协议名称:
注册表位置HKEY_CLASSES_ROOT\Extensions\ContractId\Windows.Protocol\PackageId
有以已安装的AppX包命名的子键,它们在ActivatableClassId\*\CustomProperties
子键的Name
值中指定它们支持的URL协议名称。
以下函数Get-AppXUriProtocol
通过Get-AppXPackage
cmdlet和注册表查找检索与给定AppX应用程序相关联的协议名称。
该函数支持通配符表达式,因此您可以按照包名称(例如应用程序的常见名称)的一部分进行搜索;例如:
Get-AppXUriProtocol *calc*
Get-AppXUriProtocol
源代码:
function Get-AppXUriProtocol {
<
.SYNOPSIS
Gets the URI protocol names assocated with AppX packages on Windows 8 and above.
.DESCRIPTION
Given AppX package names or wildcard expressions, retrieves all associated
URI protocol names that can be used to launch these applications.
AppX is the package format for UWP applications typically distributed via
the Microsoft Store.
For instance, the protocol names associated with the Windows 10 Calculator
application are 'calculator' and 'ms-calculator', so you can use
Start-Process calculator: (note the appended ":") to launch it.
.PARAMETER PackageName
One or more package family names, full package names, or wildcard expresssions
matching either.
.EXAMPLE
Get-AppXUriProtocol *calculator*
Outputs a [pscustomobject] instance such as the following:
PackageFullName Protocols
--------------- ---------
Microsoft.WindowsCalculator_10.1908.0.0_x64__8wekyb3d8bbwe {calculator, ms-calculator}
[CmdletBinding(PositionalBinding = $false)]
[OutputType([pscustomobject])]
param (
[Parameter(Mandatory, Position = 0)]
[SupportsWildcards()]
[string[]] $PackageName
)
begin {
if ($env:OS -ne 'Windows_NT') { Throw "This command is supported on Windows only." }
}
process {
$packages = foreach ($name in $PackageName) { Get-AppXPackage -Name $name }
foreach ($package in $packages) {
$protocolSchemes = (Get-ChildItem registry::HKEY_CLASSES_ROOT\Extensions\ContractId\Windows.Protocol\PackageId\$($package.PackageFullName)\ActivatableClassId\*\CustomProperties).ForEach('GetValue', 'Name')
[pscustomobject] @{
PackageFullName = $package.PackageFullName
Protocols = $protocolSchemes
}
}
}
}
Start-Process shell:AppsFolder\Microsoft.WindowsAlarms_8wekyb3d8bbwe!App
。鉴于需要知道包系列名称,其中包括抽象发布者ID(8wekyb3d8bbwe
)-GetAppXPackage
可以帮助发现。然而,如果可能的话,通过它们特定的URI协议方案启动UWP应用程序通常更容易;在这种情况下:Start-Process ms-clock:
。 - mklement0