我想创建一个alias
的cmdlet
后,我关闭的PowerShell当前会话不到期,让我们说我有这个别名:
C:\Users\Aymen> New-Alias Goto Set-Location
这样可以完美地创建Goto
别名,但是即使在关闭当前会话后我也想使用它,我该如何实现。
注意:
PowerShell帮助系统建议我可以导出创建的别名,并在下次打开新会话时将其导入,实际上,这并不是我真正想要的,因为在我之后是否有直接明确的方法来保持别名通过不同的会话创建它
我想创建一个alias
的cmdlet
后,我关闭的PowerShell当前会话不到期,让我们说我有这个别名:
C:\Users\Aymen> New-Alias Goto Set-Location
这样可以完美地创建Goto
别名,但是即使在关闭当前会话后我也想使用它,我该如何实现。
注意:
PowerShell帮助系统建议我可以导出创建的别名,并在下次打开新会话时将其导入,实际上,这并不是我真正想要的,因为在我之后是否有直接明确的方法来保持别名通过不同的会话创建它
Answers:
更新-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.0
32 位环境。
\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
将这种事情直接添加到您的$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约定来命名我的方法。但是,是的,如果您不挑剔,则可以随意命名您要调用的方法。
您可以在简单的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部分,勾选“更改执行策略...”选项,然后应用。
echo $profile
是一个很棒的技巧,可帮助您找到添加文件的正确位置。感谢您的全面答复
简单。例如...
打开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”,并使其在您的函数中执行代码!
只是要添加到此可能的位置列表中...
这对我不起作用:
\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
要访问该文件,请输入下一个命令:
ise $ PROFILE.CurrentUserAllHosts
请注意,如果您之前从未执行过此操作,则将看到由于执行策略而无法运行脚本,您需要将其从“受限”(默认)更改为“不受限制”。
为此,请关闭脚本,然后键入以下命令:
Set-ExecutionPolicy -Scope CurrentUser
然后:
远程签名
然后再次执行以下命令:
ise $ PROFILE.CurrentUserAllHosts
然后最后在脚本中键入您的别名,将其保存,即使您重新启动计算机,它们也应在每次运行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:然后在工具〜/ Documents / tools / profile.ps1中:
function Do-ActualThing {
# do actual thing
}
Set-Alias MyAlias Do-ActualThing
第三步:
$ Set-ExecutionPolicy -Scope CurrentUser Unrestricted $。./install_profile.ps1