How I can create functions inside my $profile
file that will be executed only if I am inside some specific path when trying to execute them?
问问题
98 次
2 回答
1
PowerShell 没有内置任何东西来有效地隐藏基于任何类型的上下文(例如您的当前目录)的命令。
在 PowerShell V3 或更高版本中,您可以使用一些围绕命令查找的事件处理程序。一种解决方案如下所示:
$ExecutionContext.InvokeCommand.PreCommandLookupAction = {
param([string]$commandName,
[System.Management.Automation.CommandLookupEventArgs]$eventArgs)
if ($commandName -eq 'MyCommand' -and $pwd -eq 'some directory')
{
$eventArgs.StopSearch = $true
}
}
于 2013-10-09T21:03:35.150 回答
0
您的配置文件在 PowerShell 启动时进行评估,因此当前目录并没有真正发挥作用。只要您能够使用 PowerShell 控制台,配置文件中的任何功能都将可用。您可以重新实现 tabexpansion2 函数,以不根据当前目录完成某些功能,但这似乎有点过头了。另一种选择是覆盖提示功能,并根据当前目录,将功能的可见性设置为公共或私有。如果它们是私有的,它们将不会出现在标签扩展中,例如:
$func = Get-Command MyFunc
$func.Visibility = 'private' # or 'public'
于 2013-10-09T20:59:49.617 回答