从 PowerShell 管理 Windows 应用程序执行别名

ian*_*ano 8 windows powershell

是否可以从 Powershell 关闭应用程序执行别名?

我理想地寻找这样的命令:

PS> Disable-AppExecutionAlias python
Run Code Online (Sandbox Code Playgroud)

目前,我能找到的唯一方法是转到“开始”菜单并搜索“管理应用程序执行别名”,然后手动禁用它们。我希望能够以编程方式完成此操作。

在此输入图像描述

上下文:我正在编写一个脚本来设置相对简单的工作站,并试图消除所有手动步骤。

编辑:

我知道Set-AliasRemove-Alias,但这些是 PowerShell 别名,而不是应用程序执行别名,如上面的屏幕截图所示。

Liv*_*eBT 3

又快又脏

这是我走了多远:

Remove-Item $env:LOCALAPPDATA\Microsoft\WindowsApps\python.exe
Remove-Item $env:LOCALAPPDATA\Microsoft\WindowsApps\python3.exe
Run Code Online (Sandbox Code Playgroud)

这就是您摆脱示例中的程序的方法。当您禁用并重新启用控制面板中的相应条目时,它将重新创建。所以这里几乎没有造成任何损坏,并且您得到了您想要的东西。

找到这个问题的正确解决方案并了解这里发生的情况需要更多的时间进行研究。但在 Windows 中做这样的事情不是我的日常工作,也不是我的专业领域,Linux 才是我更感兴趣的。

为使用 winget 安装的应用程序手动创建别名

实际上让我开始研究这个问题的是,像jq通过 winget 安装的程序不会在路径上,因此不会被发现。有点与你所问的相反。所以我深入研究了文件系统、注册表和在线搜索。

现在jq我正在 PowerShell 中执行此操作:

# Reg2CI (c) 2022 by Roger Zander
if((Test-Path -LiteralPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\jq.exe") -ne $true) {  New-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\jq.exe" -force -ea SilentlyContinue };
New-ItemProperty -LiteralPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\jq.exe' -Name '(default)' -Value "$env:LOCALAPPDATA\Microsoft\WinGet\Packages\stedolan.jq_Microsoft.Winget.Source_8wekyb3d8bbwe\jq-win64.exe" -PropertyType String -Force -ea SilentlyContinue;
New-ItemProperty -LiteralPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\jq.exe' -Name 'Path' -Value "$env:LOCALAPPDATA\Microsoft\WinGet\Packages\stedolan.jq_Microsoft.Winget.Source_8wekyb3d8bbwe" -PropertyType String -Force -ea SilentlyContinue;
Run Code Online (Sandbox Code Playgroud)

对于超长的行感到抱歉,显然只有极少数使用 Windows 的人关心可读代码和行长度。

UWP

这似乎与UWP有关。这是一个流行的例子,这是Stackoverflow 上的另一个问题

抱歉,我想对此进行更多的写作和研究,但我在这里完全偏离了方向。