如何创建永久的PowerShell别名

我想创建一个cmdletalias,它在关闭当前Powershell会话后不会过期,假设我有这样的别名:

C:\Users\Aymen> New-Alias Goto Set-Location

这完美地创建了Goto别名,但我想在关闭当前会话后仍然使用它,如何实现呢?

注意:

PowerShell帮助系统建议我可以导出我创建的别名,并在下次我打开一个新会话时导入它们,实际上这并不是我真正在寻找的,是否有一种直接清晰的方法来保持别名在我通过不同的会话创建它之后

189261 次浏览

更新- 2021年1月

可以在profile.ps1文件中存储每次PowerShell启动时要执行的任何PowerShell代码。至少有6种不同的路径存储代码的位置,这取决于哪个用户必须执行它。我们将只考虑其中两个:“所有用户”;“仅限您的用户”;路径(参见前面的链接了解更多选项)。

要回答你的问题,你只需要创建一个包含你想要执行的代码的profile.ps1文件,即:

New-Alias Goto Set-Location

并保存在正确的路径:

  • "$Home\Documents"(通常是C:\Users\<yourname>\Documents):只有你的用户才能执行代码。这是推荐的位置 您可以通过在PowerShell中运行echo $profile来快速找到您的配置文件位置
  • $PsHome (C:\Windows\System32\WindowsPowerShell\v1.0):每个用户都会执行这段代码

重要的:记住你需要重新启动你的PowerShell实例来应用这些变化。

提示

  • 如果两条路径都包含profile.ps1文件,则先执行全用户路径,然后执行用户特定路径。这意味着特定于用户的命令将在重复或冲突的情况下覆盖变量。

  • 如果不需要将代码的执行扩展到每个用户,则始终将代码放在特定于用户的配置文件中。这是更安全的,因为您不会污染其他用户的空间(通常,您不想这样做)。
    另一个优点是您不需要管理员权限就可以将文件添加到您的用户空间(您需要对C:\Windows\System32中的任何内容进行操作)
  • 如果你真的需要为每个用户执行配置文件代码,请注意PowerShell的32位和64位实例的$PsHome路径是不同的。如果你想总是执行概要代码,你应该考虑这两种环境。

    路径为:

    • C:\Windows\System32\WindowsPowerShell\v1.0用于64位环境
    • 32位的C:\Windows\SysWow64\WindowsPowerShell\v1.0(是的,我知道,文件夹命名是违反直觉的,但它是正确的)。
将这类东西直接添加到$env:WINDIR powershell文件夹中并不是一个好主意,除非你真的想要你的别名是全局的。
建议添加到个人配置文件中:

cd $env:USERPROFILE\Documents
md WindowsPowerShell -ErrorAction SilentlyContinue
cd WindowsPowerShell
New-Item Microsoft.PowerShell_profile.ps1 -ItemType "file" -ErrorAction SilentlyContinue
powershell_ise.exe .\Microsoft.PowerShell_profile.ps1

现在将别名添加到Microsoft.PowerShell_profile。现在打开的Ps1文件:

function Do-ActualThing {
# do actual thing
}


Set-Alias MyAlias Do-ActualThing

然后保存它,并刷新当前会话:

. $profile

<强>注意: 以防万一,如果你得到许可问题,如

CategoryInfo: SecurityError: (:) [], PSSecurityException + fullyqualifiederror: UnauthorizedAccess

尝试下面的命令并再次刷新会话。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

创建profile1。PSL文件,输入以下命令:

新项目概要文件。CurrentUserAllHosts -ItemType file -Force

要访问文件,输入下面的命令:

伊势美元概要文件。CurrentUserAllHosts

请注意如果你以前没有这样做过,你会发现你不会 由于您的执行策略,您需要将脚本的执行策略从受限(默认)更改为无限制

为此,关闭脚本,然后键入以下命令:

Set-ExecutionPolicy -Scope CurrentUser

然后:

RemoteSigned

然后再次执行以下命令:

伊势美元概要文件。CurrentUserAllHosts

然后最后在脚本中键入您的别名,保存它,它们应该 每次运行powershell时都要运行,即使是在重新启动计算机之后。< / p >

只是在这个可能的地点列表上加上…

这对我没用: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 < / p > 然而,这样做了: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 < / p > 如果你没有配置文件,或者你想建立一个配置文件,运行以下命令,它将创建必要的文件夹/文件,甚至告诉你它位于哪里! 新建项目-path $profile -type file -force < /代码> < / p >

2018年,Windows 10

您可以在一个简单的PowerShell脚本的帮助下链接到任何文件或目录。

正在编写文件快捷方式脚本

打开Windows PowerShell ISE。在脚本窗格中写入:

New-Alias ${shortcutName} ${fullFileLocation}

然后转到命令行窗格。使用echo $profile找到您的PowerShell用户配置文件地址。将脚本保存在此地址。

enter image description here

PowerShell配置文件地址中的脚本将在每次打开PowerShell时运行。该快捷方式应该适用于每个新的PowerShell窗口。

正在编写目录快捷方式脚本

它需要我们脚本中的另一行。

function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction}

其余部分完全相同。

enter image description here

启用PowerShell脚本

默认情况下,PowerShell脚本是阻塞的。要启用它们,请打开设置-> Update &安全->针对开发人员。选择开发者模式(可能需要重新启动)。 选择开发者模式Windows 10。< / p >

向下滚动到PowerShell部分,勾选“更改执行策略…”选项,然后应用。

Enabling PowerShell scripts

打开一个Windows PowerShell窗口,输入:

notepad $profile

然后创建一个函数,比如:

function goSomewhereThenOpenGoogleThenDeleteSomething {
cd C:\Users\
Start-Process -FilePath "http://www.google.com"
rm fileName.txt
}

然后在函数名下面输入:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

现在你可以输入单词“google”;到Windows PowerShell中,让它在函数中执行代码!

这有点花哨…但它是有效的:

步骤1:创建Powershell配置文件

FILE: install_profile.ps1
# THIS SCRIPT BLOWS AWAY YOUR DEFAULT POWERSHELL PROFILE SCRIPT
#   AND INSTALLS A POINTER TO A GLOBAL POWERSHELL PROFILE


$ErrorActionPreference = "Stop"


function print ([string]$msg)
{
Write-Host -ForegroundColor Green $msg
}


print ""


# User's Powershell Profile
$psdir  = "$env:USERPROFILE\Documents\WindowsPowerShell"
$psfile = $psdir + "\Microsoft.PowerShell_profile.ps1"


print "Creating Directory: $psdir"
md $psdir -ErrorAction SilentlyContinue | out-null


# this is your auto-generated powershell profile to be installed
$content = @(
"",
". ~/Documents/tools/profile.ps1",
""
)


print "Creating File: $psfile"
[System.IO.File]::WriteAllLines($psfile, $content)


print ""


# Make sure Powershell profile is readable
Set-ExecutionPolicy -Scope CurrentUser Unrestricted

步骤2: then in tools ~/Documents/tools/profile.ps1:

function Do-ActualThing {
# do actual thing
}


Set-Alias MyAlias Do-ActualThing

步骤3:

$ Set-ExecutionPolicy -Scope CurrentUser无限制 $ . ./install_profile.ps1

. exe

我发现我可以运行这个命令:

notepad $PROFILE.CurrentUserAllHosts

它打开我的默认powershell配置文件(当前用户,所有主机)。我发现在这里

然后添加别名。例如,这是我的jn的别名jupyter notebook(我讨厌每次都输入麻烦的jupyter notebook):

Set-Alias -Name jn -Value C:\Users\words\Anaconda3\Scripts\jupyter-notebook.exe

这是个人喜好的问题,但我更喜欢将我的别名存储在一个单独的文件中,并在配置文件中调用Import-Alias

$profileDir = Split-Path $PROFILE -Parent
$profileFile = Join-Path $profileDir profile.ps1
$aliasFile = Join-Path $profileDir aliases.csv
New-Alias -Name npp -Value "C:\Program Files\Notepad++\notepad++.exe" -Description "Notepad++"
Export-Alias -Name npp -Path $aliasFile -Append
ise $profileFile

然后在ISE中,将这一行放到你的profile.ps1中

Import-Alias -Path (Join-Path $PSScriptRoot aliases.csv)