Назад | Перейти на главную страницу

Могу ли я подключить PowerShell для вызова функции каждый раз, когда выполняю команду?

Я хочу изменить заголовок окна PowerShell на командную строку текущего выполняемого внутри него процесса, как это делает CMD.EXE.

Могу ли я сделать это в PowerShell?

Есть ли какая-то функция вроде prompt который вызывается, когда я выполняю команду в PowerSHell?

Вы хотите это для небольшого избранного числа исполняемых файлов? Или все бывшие?

Один взлом для выбранного количества исполняемых файлов будет делать

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

Да, есть, это моя функция для подсказки, она помещает в подсказку последнюю часть фактического пути. Также установите заголовок окна, и когда вы запустите его от имени администратора, измените фон и добавьте Admin: в заголовок.

$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 .... и т. Д.

Это определенно возможно, хотя вам придется кодировать это самостоятельно. В этой статье TechNet описывается, как изменить строку заголовка исполняемого окна.

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