在 powershell 中设置永久别名的最佳方法?

在 powershell 中设置永久别名的最佳方法?

当我安装类似的东西时ffmpeg,它会为、、&winget设置永久别名。ffmpegffplayffprobe

winget install gyan.ffmpeg

它似乎没有向我的路径环境变量添加任何内容。如果我使用Set-AliasPowerShell 实用程序,则所述别名是短暂的,仅持续到当前会话结束。最终,我发现我可以使用 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是不可能的,那么该如何做。

相关内容