当我安装类似的东西时ffmpeg
,它会为、、&winget
设置永久别名。ffmpeg
ffplay
ffprobe
winget install gyan.ffmpeg
它似乎没有向我的路径环境变量添加任何内容。如果我使用Set-Alias
PowerShell 实用程序,则所述别名是短暂的,仅持续到当前会话结束。最终,我发现我可以使用 my 来$profile
表示每次启动 shell 时都会实例化的别名列表。
winget 是否仅使用不同的“配置文件”执行相同的操作?有没有更好的方法?
答案1
因为 WinGet 是不是由于是 PowerShell 特有的,因此它不能依赖于 PowerShell 内容。相反,它做添加到%PATH%
(一次)。执行此操作时还会显示一条消息。如果您没有看到该消息,则可能%PATH%
之前已经修改过。WinGet 会将%LOCALAPPDATA%\Microsoft\WinGet\Links\
(以扩展形式)添加到您的用户%PATH%
(而不是系统范围的用户)中。
WinGet 在此文件夹中创建符号链接。然后可以从任何 shell 或跑步迅速的。
在我看来,是的,这种方法更优越,因为它在任何地方都有效。
但是,它仅适用于.exe
文件。如果您需要 PowerShell 特定的别名(涉及 cmdlet 或其他内容),则必须使用 PowerShell 方法永久创建它们。$profile
这是可行的方法。
答案2
来自帖子 如何创建永久的 PowerShell 别名,我引用优秀的 奈格尔的回答:
可以将
profile.ps1
任何 PowerShell 代码存储在文件中,以便在每次 PowerShell 启动时执行。至少有6 条不同的路径 根据哪个用户必须执行代码来确定将代码存储在何处。我们只考虑其中的 2 个:“所有用户”和“仅您的用户”路径(请点击上一个链接查看更多选项)。要回答您的问题,您只需创建一个
profile.ps1
包含要执行的代码的文件,即:New-Alias Goto Set-Location
并将其保存在正确的路径:
"$Home\Documents"
(通常C:\Users\<yourname>\Documents
):只有您的用户才能执行代码。这是推荐的位置echo $profile
您可以通过在 PowerShell 中运行来快速找到您的配置文件位置$PsHome
(C:\Windows\System32\WindowsPowerShell\v1.0
):每个用户都会执行此代码重要的:请记住,您需要重新启动 PowerShell 实例才能应用更改。
尖端
如果两个路径都包含
profile.ps1
文件,则首先执行所有用户的路径,然后执行用户特定的路径。这意味着在出现重复或冲突的情况下,用户特定的命令将覆盖变量。如果不需要将代码扩展到每个用户,请始终将代码放在用户特定的配置文件中。这样更安全,因为您不会污染其他用户的空间(通常,您不想这样做)。
另一个优点是您不需要管理员权限即可将文件添加到您的用户空间(您可以对 C:\Windows\System32 中的任何内容执行此操作)。
如果你确实需要为每个用户执行配置文件代码,请注意 32 位和 64 位 PowerShell 实例的 $PsHome 路径是不同的。如果你想要 总是执行配置文件代码。
路径如下:
C:\Windows\System32\WindowsPowerShell\v1.0
对于 64 位环境
C:\Windows\SysWow64\WindowsPowerShell\v1.0
对于 32 位版本(是的,我知道,文件夹命名是违反直觉的,但是这是正确的)。
答案3
不,像 winget 这样的 cmdlet 和其他 powershell 模块会自行安装在您的 powershell 模块文件夹中。运行import-module <name>
该模块的命令后,现在就可以使用了。命令只是函数。
要找出模块的存储位置,请在 powershell 中运行以下命令:write-host $env:PSModulePath
如果要复制与 winget 相同的内容,请创建一个新的 powershell 脚本,并将以下内容放入其中:
function MyFunction()
{
write-host "MyFunction was executed."
}
并将其保存在之前找到的路径中作为*.psm1
文件,其中的 * 当然可以替换为您想要的任何内容。
我发现没有必要真正编写自己的模块,而最终只是在我的 profile.ps1 中创建了函数,所以我不完全确定自动加载模块的位置,以及是否需要在模块旁边添加 .psd1 文件才能使其工作。
这个答案只是为了让你知道如果使用profile.ps1是不可能的,那么该如何做。