1

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?

4

2 回答 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 回答