Posso ligar o PowerShell para chamar uma função sempre que executo um comando?

2

Eu quero alterar o título da janela do PowerShell para a linha de comando do processo atualmente em execução dentro dele, assim como o CMD.EXE.

Posso fazer isso no PowerShell?

Existe alguma função como prompt , que é chamada quando executo um comando no PowerSHell?

    
por Meh 30.07.2010 / 15:26

3 respostas

2

Você quer um pequeno número selecionado de executáveis? Ou todos os exes?

Um hack para um número selecionado de executáveis faria

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

}

Em seguida, basta executar cd c: cmd / c dir / s

E veja a alteração do título

E para todos os comandos

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
}

E tente o ping 127.0.0.1

Seu hacky, YMMV

    
por 01.10.2010 / 07:41
0

Isso é definitivamente possível, embora você tenha que codificar por si mesmo. Este artigo do TechNet descreve como alterar a linha de título da janela de execução.

link

    
por 30.07.2010 / 17:24
0

Sim, esta é a minha função para prompt, coloque a última parte do caminho real no prompt. Também defina o título da janela e, quando você executar como administrador, altere o plano de fundo e adicione um Admin: no título.

$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) { '>>' }) + '>         ';

}

Coloque isso no seu perfil, lembre-se de que qualquer perfil é acessível diretamente com a variável do perfil: $ profile.CurrentUserCurrentHost, $ profile.CurrentuserAllhost .... etc.

    
por 10.08.2010 / 00:52