每次执行命令时我可以挂接 PowerShell 来调用某个函数吗?

每次执行命令时我可以挂接 PowerShell 来调用某个函数吗?

我想将 PowerShell 窗口的标题更改为其中当前正在执行的进程的命令行,就像 CMD.EXE 一样。

我可以在 PowerShell 中执行此操作吗?

prompt当我在 PowerSHell 中执行命令时,是否会调用某个函数?

答案1

您是否希望将其用于少数选定的可执行文件?还是所有 exe?

针对选定数量的可执行文件进行一次 hack 即可

function cmd
{
    $title = $host.UI.RawUI.WindowTitle
    $host.UI.RawUI.WindowTitle = 'cmd.exe ' + ($args -join " ")
    cmd.exe $args
    $host.UI.RawUI.WindowTitle = $title
}

然后只需运行 cd c: cmd /c dir /s

并查看标题变化

对于所有命令

Get-Command -CommandType Application | where {$_.Name -match '.exe$'} | %{
$f = @'
    function {0}
    {{
        $title = $host.UI.RawUI.WindowTitle
        $host.UI.RawUI.WindowTitle = '{0} ' + ($args -join " ")
        {0}.exe $args
        $host.UI.RawUI.WindowTitle = $title
    }}
'@ -f ($_ -replace '.exe', '')
Invoke-Expression $f
}

然后尝试 ping 127.0.0.1

这是黑客行为,YMMV

答案2

这绝对是可能的,尽管你必须自己编写代码。这篇 TechNet 文章描述了如何更改执行窗口的标题行。

http://technet.microsoft.com/en-us/library/ee156814.aspx

答案3

是的,这是我的提示函数,它将实际路径的最后一部分放在提示中。还设置窗口标题,当您以管理员身份运行时,更改背景并在标题中添加管理员:。

$FirstRun=1
function prompt{
$shortpath = split-path (Get-Location) -leaf;

$id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$p = New-Object System.Security.Principal.WindowsPrincipal($id)

if
($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
   {
   $host.UI.RawUI.WindowTitle = "ADMIN:$shortpath"
   if($FirstRun){$host.UI.RawUI.BackgroundColor = "Black"; cls; $global:FirstRun = 0;}
}
else
{$host.UI.RawUI.WindowTitle = $shortpath}

$(if (test-path variable:/PSDebugContext) 
   { '[DBG]: ' } 
else { '' }) + 'PS ' + $($shortpath) + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '>         ';

}

将其放入您的个人资料中,记住任何个人资料都可以直接通过个人资料变量访问:$profile.CurrentUserCurrentHost,$profile.CurrentuserAllhost......等等。

相关内容