我想将 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 文章描述了如何更改执行窗口的标题行。
答案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......等等。