在 PowerShell 中快速启动“复杂”命令

在 PowerShell 中快速启动“复杂”命令

是否可以使用别名在 PowerShell 内部运行“复杂”的 PowerShell 命令?

举个例子,我想Get-VpnConnection -name "VPNname"通过一个(非保留)单词命令(例如vpn通过别名)来替换命令?不幸的是,set-Alias vpn "Get-VpnConnection -name VPNname"这行不通,也行不通set-Alias vpn Get-VpnConnection -name "VPNname"(请注意第一个引号的位置不同)。

到目前为止,我的“解决方法”是将命令作为脚本文件保存在 PowerShell 的“启动目录”(在我的情况下为)中,并通过别名C:\Users\username运行。我使用创建别名。有没有直接的方法可以做到这一点(无需创建脚本文件)?.\vpn.ps1set-Alias vpn ".\script_vpncheck.ps1"

后续问题:如果这不可能,我想使用脚本文件(例如 via)初始化别名.\script.ps1(注意:我不需要永久存储它们)。不幸的是,这不起作用。文件似乎已执行,但别名不起作用。知道为什么吗?

答案1

只需将别名存储到轮廓

  • 通过运行从 PowerShell 打开配置文件notepad $PROFILE(或使用您喜欢的任何编辑器)
  • 输入您想要运行的命令到该文件并保存(例如Set-Alias
  • 重新启动 PowerShell 或通过运行获取新更新的配置文件. $PROFILE

该配置文件与 bash 中的配置文件完全相同.bashrc,将在启动 shell 时运行。除了别名,您还可以编写功能更复杂的事情。它们将在 PowerShell 启动后可用

function vpn($url) { Get-VpnConnection -name $url }
Set-Alias -Name vpn -Value Get-VpnConnection

您无法为带有参数的命令设置别名,因此在这种情况下您必须创建一个函数

你的 ps1 文件不起作用的原因是它在子壳当子 shell 关闭时,所有内容(包括新别名)都将被清除。您必须来源.使用点源运算符(类似于.bash)在当前 shell 中运行脚本

. .\script.ps1

但是,您不必每次需要别名时都去寻找,只需像上面那样在配置文件中永久地进行此操作即可

答案2

别名不是为了接受参数而设计的。来自about_aliases帮助主题:

带参数的命令的替代名称

您可以为 cmdlet、脚本、函数或可执行文件分配别名。您不能为命令及其参数分配别名。例如,您可以为 Get-Eventlog cmdlet 分配别名,但不能为 Get-Eventlog -LogName System 命令分配别名。

您可以创建一个包含该命令的函数。要创建函数,请键入单词“function”,后跟函数名称。键入命令,并将其括在括号 ({}) 中。

例如,以下命令创建 syslog 函数。该函数代表 Get-Eventlog -LogName System 命令:

function Get-SystemEventlog {Get-Eventlog -LogName System}
Set-Alias -Name syslog -Value Get-SystemEventlog

您现在可以输入“syslog”来代替命令。并且,您可以为新功能创建别名。

但您不需要单独的脚本文件。您可以定义一个简单的函数,并使用以下代码将其添加到您的配置文件中:

'Function vpn { Get-VpnConnection -name VPNname }' | Add-Content $PROFILE

该命令vpn将在所有电源外壳从那时起的会议。

相关内容