PowerShell作用域和点外包具有多个可选的提示功能

问题描述 投票:1回答:2

我发现了以下我不理解的行为。我的$profile中有一些功能(具体来说,它们会更改prompt,因此会更改function prmopt { }),这些设置会更改我的提示,并且在启动控制台时,如果我将功能(. PromptCustom)来源完全生效,新的提示将接管。但是,我不希望我的$profile太大,所以我将五个或五个左右不同的提示移到了模块中,但是当我尝试对其中的任何一个进行点源处理时,什么也没发生。它们只是输出提示内容,但not会接管默认的prompt

目标是能够具有多个提示创建功能,我可以根据需要在它们之间进行切换(即,不是一个适用于每个控制台的提示,我只需将function prompt放入我的$profile中即可。告诉我如何正确地为模块中定义的函数提供源代码,以及如何实现具有多个我可以在它们之间切换的提示函数并使这些函数在模块上运行的目标?(编辑:将此问题更新为@ mklement0指出,因为实际上这与所需的目标有关,即提示我可以在两者之间进行切换。

这里是我的提示函数之一,如果在我的$profile中定义了此函数,则该函数将作为默认提示perfectly

接管,但是如果将其放入模块中则不执行任何操作:
function PromptShortenPath {
    # https://stackoverflow.com/questions/1338453/custom-powershell-prompts
    function shorten-path([string] $path) {
        $loc = $path.Replace($HOME, '~')
        # remove prefix for UNC paths
        $loc = $loc -replace '^[^:]+::', ''
        # make path shorter like tabs in Vim,
        # handle paths starting with \\ and . correctly
        return ($loc -replace '\\(\.?)([^\\])[^\\]*(?=\\)','\$1$2')
    }
    function prompt {
        # our theme
        $cdelim = [ConsoleColor]::DarkCyan
        $chost = [ConsoleColor]::Green
        $cloc = [ConsoleColor]::Cyan

        write-host "$([char]0x0A7) " -n -f $cloc
        write-host ([net.dns]::GetHostName()) -n -f $chost
        write-host ' {' -n -f $cdelim
        write-host (shorten-path (pwd).Path) -n -f $cloc
        write-host '}' -n -f $cdelim
        return ' '
    }

    if ($MyInvocation.InvocationName -eq "PromptShortenPath") {
        "`nWarning: Must dotsource '$($MyInvocation.MyCommand)' or it will not be applied to this session.`n`n   . $($MyInvocation.MyCommand)`n"
    } else {
        . prompt 
    }
}

我发现了以下我不理解的行为。我的$ profile中有一些功能(具体来说,它们会更改提示,所以功能prmopt {})的设置会更改我的提示...

powershell scope prompt
2个回答
1
投票

如果删除外部功能,并在模块路径中以相同名称另存为modulename.psm1,则在文件夹中:


0
投票

Scepticalist's helpful answer提供了有效的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.