如何在我的$profile
文件中创建只在我尝试执行某些特定路径时才会执行的函数?
答案 0 :(得分: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
}
}
答案 1 :(得分:0)
您的个人资料在PowerShell启动时进行评估,因此当前目录并未真正发挥作用。只要您能够使用PowerShell控制台,配置文件中的任何功能都将可用。您可以重新实现tabexpansion2函数,以便不根据当前目录选项卡完成某些功能,但这似乎有点过分。另一种选择是覆盖提示函数,并根据当前目录,将函数的可见性设置为public或private。如果它们是私有的,它们将不会显示在标签扩展中,例如:
$func = Get-Command MyFunc
$func.Visibility = 'private' # or 'public'