我想创建一个cmdlet的别名,它不会在我关闭Powershell的当前会话后过期,假设我有这样的别名:
C:\Users\Aymen> New-Alias Goto Set-Location
这完美地创建了Goto别名,但我想使用它,甚至在我关闭当前会话后,我如何实现这一点。
注意:
PowerShell帮助系统建议我可以导出我创建的别名,并在下次我打开一个新会话时导入它们,实际上这并不是我真正在寻找的,是否有一种直接清晰的方法来保持别名在我通过不同的会话创建它之后
我想创建一个cmdlet的别名,它不会在我关闭Powershell的当前会话后过期,假设我有这样的别名:
C:\Users\Aymen> New-Alias Goto Set-Location
这完美地创建了Goto别名,但我想使用它,甚至在我关闭当前会话后,我如何实现这一点。
注意:
PowerShell帮助系统建议我可以导出我创建的别名,并在下次我打开一个新会话时导入它们,实际上这并不是我真正在寻找的,是否有一种直接清晰的方法来保持别名在我通过不同的会话创建它之后
当前回答
提供最简单的解决方案:
打开powershell notepad $ phome \ profile .ps1:
函数Goto() { #函数名为别名,命令集为函数体 Set-Location } 3.保存并退出记事本 4. 设置powershell权限:Set-ExecutionPolicy -ExecutionPolicy remotessigned 5. 重新启动powershell并写入goto
其他回答
打开一个Windows PowerShell窗口,输入:
notepad $profile
然后创建一个函数,比如:
function goSomewhereThenOpenGoogleThenDeleteSomething {
cd C:\Users\
Start-Process -FilePath "http://www.google.com"
rm fileName.txt
}
然后在函数名下面输入:
Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething
现在,您可以在Windows PowerShell中输入单词“谷歌”,并让它在函数中执行代码!
我发现我可以运行这个命令:
notepad $PROFILE.CurrentUserAllHosts
它打开我的默认powershell配置文件(当前用户,所有主机)。我在这里找到的。
然后添加别名。例如,这是我的jupyter笔记本的别名jn(我讨厌每次都打印出笨重的jupyter笔记本):
Set-Alias -Name jn -Value C:\Users\words\Anaconda3\Scripts\jupyter-notebook.exe
更新- 2021年1月
它可以存储在配置文件中。每次PowerShell启动时,将在ps1文件中执行PowerShell代码。至少有6个不同的路径来存储代码,这取决于哪个用户必须执行它。我们将只考虑其中的两个:“所有用户”和“仅您的用户”路径(参见前面的链接了解更多选项)。
要回答您的问题,您只需要创建一个概要文件。包含你想要执行的代码的Ps1文件,即:
New-Alias Goto Set-Location
并保存在正确的路径:
"$Home\Documents"(通常是C:\Users\<yourname>\Documents):只有你的用户才能执行代码。这是推荐的位置 您可以通过在PowerShell中运行echo $profile快速找到您的配置文件位置 $ phome (C:\Windows\System32\WindowsPowerShell\v1.0):每个用户都会执行这段代码
重要提示:请记住,您需要重新启动PowerShell实例才能应用更改。
TIPS
If both paths contain a profile.ps1 file, the all-users one is executed first, then the user-specific one. This means the user-specific commands will overwrite variables in case of duplicates or conflicts. Always put the code in the user-specific profile if there is no need to extend its execution to every user. This is safer because you don't pollute other users' space (usually, you don't want to do that). Another advantage is that you don't need administrator rights to add the file to your user-space (you do for anything in C:\Windows\System32). If you really need to execute the profile code for every user, mind that the $PsHome path is different for 32bit and 64bit instances of PowerShell. You should consider both environments if you want to always execute the profile code. The paths are: C:\Windows\System32\WindowsPowerShell\v1.0 for the 64bit environment C:\Windows\SysWow64\WindowsPowerShell\v1.0 for the 32bit one (Yeah I know, the folder naming is counterintuitive, but it's correct).
将这类东西直接添加到$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 + fullyqualifiederrid: UnauthorizedAccess
尝试下面的命令并再次刷新会话。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
这是个人喜好的问题,但我更喜欢将我的别名存储在一个单独的文件中,并在概要文件中调用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)