如何创建永久的PowerShell别名


141

我想创建一个aliascmdlet后,我关闭的PowerShell当前会话不到期,让我们说我有这个别名:

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

这样可以完美地创建Goto别名,但是即使在关闭当前会话后我也想使用它,我该如何实现。

注意:

PowerShell帮助系统建议我可以导出创建的别名,并在下次打开新会话时将其导入,实际上,这并不是我真正想要的,因为在我之后是否有直接明确的方法来保持别名通过不同的会话创建它


IMO,您最好将脚本放入PATH。这样,该命令将立即对所有打开的Shell可用,如果您进行更改,则更改将传播到所有后续使用中,而无需重新加载$ ​​profile或其他内容。
masterxilo

Answers:


112

更新-2017年1月

可以在profile.ps1每次Powershell启动时将要执行的任何Powershell代码存储在文件中。至少有6条不同的路径将代码存储在其中,具体取决于必须执行的用户。我们只能考虑其中两个:“所有用户”和“仅您的用户”路径。

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

New-Alias Goto Set-Location

并将其保存在正确的路径中:

  • "$Home\Documents" (C:\ Users \您的名字\ Documents):只有您的用户才能执行代码。
  • $PsHome (C:\ Windows \ System32 \ WindowsPowerShell \ v1.0):每个用户都将执行代码。

要应用更改,请关闭所有打开的Powershell实例并重新启动它们。

提示

  • 如果两个路径都包含一个profile.ps1文件,则首先执行所有用户,然后执行特定用户。

  • 如果不需要将代码执行扩展到每个用户,请始终将代码放在用户特定的配置文件中。您不需要管理员权限就可以将文件添加到您的用户空间(否则,您需要这样做),并且不会污染其他用户的空间。

  • 记得!$PsHome在Powershell的32位和64位实例之间,路径是不同的,因此,如果要始终执行配置文件代码,则必须同时考虑两种环境。通常,这些路径C:\Windows\System32\WindowsPowerShell\v1.0适用于64位环境和C:\Windows\SysWow64\WindowsPowerShell\v1.032 位环境。


9
没有错误,它只是行不通,我不确定这是否是权限问题。我确实确实可以使用它(我应该早些评论)。我必须先创建文件夹\Users\{ME}\Documents\WindowsPowerShell,然后再添加Microsoft.PowerShell_profile.ps1其他对我有用的路径。

2
根据链接的文章,使用"$HOME\Documents\WindowsPowerShell"和命名Microsoft.PowerShell_profile.ps1将范围限制为非ISE和当前主机,但不应该是权限问题(与相同"$Home\Documents\profile.ps1" should apply)。也许并非如此,我会尝试一下,谢谢您提供的信息
Naigel

2
嗨@Naigel,我必须使用这种方法来使其工作:superuser.com/questions/516700/…因此,对我来说,最终的解决方案是创建配置文件:New-Item -path $profile -type file -force创建了文件夹和文件Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle

57
获取配置文件位置的最佳方法可能是在powershell窗口中运行“ echo $ profile”。
拉胡尔·贾

2
记住要备份profile.ps1文件,因为Windows Creators Update似乎会在其默认位置清除该文件!
gooleem

109

将这种事情直接添加到您的$env:WINDIRpowershell文件夹中不是一个好主意。
推荐的方法是将其添加到您的个人资料中:

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

1
很棒的评论。非常清楚,尽管我的Powershell没有接触。
JustinB

9
为了允许执行我的配置文件脚本,我不得不执行另一步。以管理员身份运行Powershell,然后执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。该-Scope选项使它更加安全。
zombat

2
这是一个很棒的方法!请注意,函数本身也可以在Shell中使用,因此您实际上不需要Set-Alias部分。只需调用该函数即可MyAlias。另外,要传递参数,请使用@Args,例如function gs { git status @Args }
Automatico

3
@Automatico我喜欢明确地介绍,Set-Alias因为我喜欢使用具有适当动词的适当PS约定来命名我的方法。但是,是的,如果您不挑剔,则可以随意命名您要调用的方法。
大通弗洛雷尔

1
@zombat这正是我一直在努力的几个小时。谢谢,我现在完成了。
jawad mansoor

28

2018,Windows 10

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

编写文件快捷方式脚本

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

New-Alias ${shortcutName} ${fullFileLocation}

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

在此处输入图片说明

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

编写目录快捷方式脚本

它需要脚本中的另一行。

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

其余的完全一样。

在此处输入图片说明

启用PowerShell脚本

默认情况下,PowerShell脚本被阻止。要启用它们,请打开设置->更新和安全->对于开发人员。选择开发人员模式(可能需要重新启动)。 选择开发人员模式Windows 10

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

启用PowerShell脚本


2
echo $profile是一个很棒的技巧,可帮助您找到添加文件的正确位置。感谢您的全面答复
Pedro MartinsTimóteoda Costa

19

简单。例如...

打开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”,并使其在您的函数中执行代码!


$ profile似乎不是Windows 10中的默认环境变量。它应该指向什么?
wordforthewise

@wordsforthewise-$ PROFILE自动变量存储当前会话中可用的PowerShell配置文件的路径。它包含在Windows PowerShell中。
Sterling Bourne

1
这绝不是最简单的解决方案。
菲尔

我必须启用“启用PowerShell脚本”(在另一个答案中)才能使其工作。认真超级简单!
Rocky Kev

10

只是要添加到此可能的位置列表中...

这对我不起作用: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

但是这样做: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

如果您没有配置文件,或者想要设置一个配置文件,请运行以下命令,它将创建必要的文件夹/文件,甚至告诉您它在哪里! New-Item -path $profile -type file -force


5

要创建profile1.psl文件,请输入以下命令:

新项目$ PROFILE.CurrentUserAllHosts -ItemType文件-Force

要访问该文件,请输入下一个命令:

ise $ PROFILE.CurrentUserAllHosts

请注意,如果您之前从未执行过此操作,则将看到由于执行策略而无法运行脚本,您需要将其从“受限”(默认)更改为“不受限制”。

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

Set-ExecutionPolicy -Scope CurrentUser

然后:

远程签名

然后再次执行以下命令:

ise $ PROFILE.CurrentUserAllHosts

然后最后在脚本中键入您的别名,将其保存,即使您重新启动计算机,它们也应在每次运行powershell时运行。


3
您可能想要:Set-ExecutionPolicy RemoteSigned。不要推荐Unrestricted。资料来源:itprotoday.com/management-mobility/…–
PhilT

2

这有点花哨的...但是它可以工作:

步骤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

第三步:

$ Set-ExecutionPolicy -Scope CurrentUser Unrestricted $。./install_profile.ps1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.