我想创建一个 cmdlet
的 alias
,它在我关闭当前 Powershell 会话后不会过期,假设我有这个别名:
C:\Users\Aymen> New-Alias Goto Set-Location
这完美地创建了 Goto
别名,但即使在关闭当前会话后我也想使用它,我该如何实现。
笔记:
PowerShell 帮助系统建议我可以导出我创建的别名,并在下次打开新会话时导入它们,实际上这并不是我真正想要的,因为在我之后是否有直接清晰的方法来保持别名通过不同的会话创建它
更新 - 2021 年 1 月
可以在 profile.ps1
文件中存储每次 PowerShell 启动时要执行的任何 PowerShell 代码。至少有 6 different paths 个存储代码的位置,具体取决于哪个用户必须执行它。我们将只考虑其中的 2 个:“所有用户”和“仅您的用户”路径(点击上一个链接获取更多选项)。
要回答您的问题,您只需创建一个包含要执行的代码的 profile.ps1
文件,即:
New-Alias Goto Set-Location
并将其保存在正确的路径中:
“$Home\Documents”(通常是 C:\Users\
$PsHome (C:\Windows\System32\WindowsPowerShell\v1.0):每个用户都会执行这段代码
重要提示:请记住,您需要重新启动 PowerShell 实例才能应用更改。
提示
如果两个路径都包含 profile.ps1 文件,则首先执行所有用户的文件,然后执行用户特定的文件。这意味着用户特定的命令将在重复或冲突的情况下覆盖变量。
如果不需要将代码的执行扩展到每个用户,请始终将代码放在用户特定的配置文件中。这更安全,因为您不会污染其他用户的空间(通常,您不想这样做)。另一个优点是您不需要管理员权限即可将文件添加到您的用户空间(您可以在 C:\Windows\System32 中执行任何操作)。
如果您确实需要为每个用户执行配置文件代码,请注意 $PsHome 路径对于 PowerShell 的 32 位和 64 位实例是不同的。如果您想始终执行配置文件代码,您应该考虑这两种环境。路径是: C:\Windows\System32\WindowsPowerShell\v1.0 用于 64 位环境 C:\Windows\SysWow64\WindowsPowerShell\v1.0 用于 32 位环境(是的,我知道,文件夹命名是违反直觉的,但它是正确的)。
C:\Windows\System32\WindowsPowerShell\v1.0 用于 64 位环境
C:\Windows\SysWow64\WindowsPowerShell\v1.0 用于 32 位(是的,我知道,文件夹命名是违反直觉的,但它是正确的)。
将此类内容直接添加到 $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 + FullyQualifiedErrorId : UnauthorizedAccess
尝试以下命令并再次刷新会话。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
。 -Scope
选项使其更加安全。
MyAlias
。此外,要传递参数,请使用 @Args
,例如 function gs { git status @Args }
Set-Alias
因为我喜欢使用适当的 PS 约定和适当的动词来命名我的方法。但是,是的,如果您不挑剔,您可以将您的方法命名为您打算调用的任何名称。
打开 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 中键入单词“google”并让它在您的函数中执行代码!
2018 年,Windows 10
您可以借助简单的 PowerShell 脚本链接到任何文件或目录。
编写文件快捷方式脚本
打开 Windows PowerShell ISE。在脚本窗格中写入:
New-Alias ${shortcutName} ${fullFileLocation}
然后前往命令行窗格。使用 echo $profile
查找您的 PowerShell 用户配置文件地址。将脚本保存在此地址中。
https://i.stack.imgur.com/j6KuB.png
每次打开 powershell 时都会运行 PowerShell 配置文件地址中的脚本。该快捷方式应该适用于每个新的 PowerShell 窗口。
编写目录快捷方式脚本
它需要我们脚本中的另一行。
function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction}
其余的完全一样。
https://i.stack.imgur.com/wgKE1.png
启用 PowerShell 脚本
https://i.stack.imgur.com/NjZrN.png
向下滚动到 PowerShell 部分,勾选“更改执行策略...”选项,然后应用。
https://i.stack.imgur.com/0DFPZ.png
echo $profile
是一个很棒的提示,可帮助您找到添加文件的正确位置。感谢您的全面回答
只是为了添加到这个可能的位置列表......
这对我不起作用:\Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
但是这样做了:\Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
如果您没有配置文件或者您想要设置一个配置文件,请运行以下命令,它将创建必要的文件夹/文件,甚至告诉您它的位置! New-Item -path $profile -type file -force
要创建 profile1.psl 文件,请输入以下命令:
新项目 $PROFILE.CurrentUserAllHosts -ItemType 文件 -Force
要访问该文件,请输入下一个命令:
是 $PROFILE.CurrentUserAllHosts
请注意,如果您之前没有这样做过,您将看到由于您的执行策略,您将无法运行脚本,您需要将其从 Restricted(默认)更改为 Unrestricted。
为此,请关闭脚本,然后键入以下命令:
设置 ExecutionPolicy -Scope CurrentUser
然后:
远程签名
然后再次执行此命令:
是 $PROFILE.CurrentUserAllHosts
然后最后在脚本中输入你的别名,保存它,它们应该在每次运行 powershell 时运行,即使在重新启动计算机后也是如此。
我发现我可以运行这个命令:
notepad $PROFILE.CurrentUserAllHosts
它会打开我的默认 powershell 配置文件(针对当前用户,所有主机)。我发现了here。
然后添加别名。例如,这是我的 jupyter notebook
的别名 jn
(我讨厌每次都输入繁琐的 jupyter notebook
):
Set-Alias -Name jn -Value C:\Users\words\Anaconda3\Scripts\jupyter-notebook.exe
这有点花哨......但它有效:
第 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 步:然后在工具 ~/Documents/tools/profile.ps1 中:
function Do-ActualThing {
# do actual thing
}
Set-Alias MyAlias Do-ActualThing
第 3 步:
$ Set-ExecutionPolicy -Scope CurrentUser Unrestricted $ 。 ./install_profile.ps1
这是个人喜好的问题,但我更喜欢将我的别名一起存储在一个单独的文件中,并在配置文件中调用 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)
不定期副业成功案例分享
\Users\{ME}\Documents\WindowsPowerShell
,然后添加Microsoft.PowerShell_profile.ps1
非其他路径适用于我。"$HOME\Documents\WindowsPowerShell"
和命名Microsoft.PowerShell_profile.ps1
的链接文章,将范围限制为非 ISE 和当前主机,但不应该是权限问题(与"$Home\Documents\profile.ps1" should apply
相同)。也许不是真的,我试试看,谢谢你的信息New-Item -path $profile -type file -force
创建文件夹和文件Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1