PowerShell:避免冲突“提示”函数定义

时间:2016-03-21 13:56:41

标签: powershell customization

PowerShell定义了一个默认的prompt函数,如果你安装PoSh-Git之类的函数,那么它定义了另一个函数。我自己编写了一个自定义提示,允许我查看何时为当前工作目录位置设置了“书签”。

我想知道的是,编写此类提示的最佳做法是什么,以便它不会与其他人发生冲突(例如,如果我当前的工作目录中有一个设置了是一个Git存储库)?

有没有办法捕获当前的定义并在我的新提示开始时执行它,所以我得到了两者的输出?

2 个答案:

答案 0 :(得分:1)

Get-Help About_Prompts建议您可以检索当前提示的脚本块,如下所示:

(Get-Command Prompt).ScriptBlock

当然,你不能在函数中执行此操作,以免创建无限循环,所以如果你把它粘在你的个人资料或模块或其他东西中:

$promptscript = (Get-Command Prompt).ScriptBlock

Function Prompt
{
    Write-Output ("* " + (Invoke-Command -Script $promptscript))
}

在当前显示的任何提示之前,你会得到一个星号,但是这依赖于现有的Prompt函数的ScriptBlock属性 - 如果不是(例如填充在DLL中)那么你可能已经没有了运气,除非您可以将函数复制到另一个名称(假设它甚至可以在DLL中执行此操作...)

注意:您需要调用上面的AFTER,其他所有内容都已加载,因此可能需要在您的配置文件中手动加载相关模块然后设置提示,或者创建一个函数来加载模块然后设置提示。

答案 1 :(得分:0)

因此,看看如何实现posh-git,一种方法似乎是:

  1. 根据需要使用带有和不带换行符的Write-,使自定义提示功能成为Write-Prompt功能。
  2. 选择posh-git example prompt并将其设为全局提示(或让自己),只需调用posh-git提示符(Write-VcsStatus)然后调用自己的自定义函数,然后再返回" > "
  3. 简而言之,不要使用多个配置文件功能,只需使用Write-Host在可以从一个全局prompt覆盖中调用的函数中编写定制的提示数据。