显示标签为“prompt”的博文。显示所有博文
显示标签为“prompt”的博文。显示所有博文

2025-12-16

Windows-PowerShell-prompt

1. about_Prompts
	1.1 获取 prompt 函数
	1.2 获取 prompt 脚本
	1.3 默认提示符
	1.4 内置提示符
2. 自定义当前会话的提示符
	2.1 几个简单的例子
	2.2 检测是否管理员运行
	2.3 显示历史记录ID
	2.4 随机更改颜色的提示符
3. 自定义配置文件
	3.1 about_Profiles
	3.2 配置文件类型和位置
	3.3 $PROFILE 变量
	3.4 创建配置文件
	3.5 编辑配置文件
	3.6 修改执行策略-允许本地脚本运行
	3.7 NoProfile 参数
	3.8 添加更多个性化设置
4. 转载一个不错的配置

1. about_Prompts

PowerShell 具有内置 prompt 函数。 可以在 PowerShell 配置文件脚本中定义自定义 prompt 函数。 
function prompt { <function-body> }
prompt 函数必须返回一个对象。 最佳做法是返回一个字符串或格式化为字符串的对象。 建议最大长度是 80 个字符。 
PS C:\Windows\system32> function prompt {"Hello, World > "}
Hello, World >

1.1 获取 prompt 函数

若要获取 prompt 函数,请在 Function 驱动器中使用 Get-Command cmdlet 或使用 Get-Item cmdlet。
Get-Command prompt
CommandType     Name                                               Version    Source
Function        prompt

Get-Item Function:prompt
CommandType     Name                                               Version    Source
Function        prompt

1.2 获取 prompt 脚本

若要获取设置提示符的值的脚本,请使用函数的 ScriptBlockprompt 属性。 
PS C:\Windows\system32> (Get-Command prompt).ScriptBlock

与所有函数一样,prompt 函数存储在 Function: 驱动器中。 若要显示创建当前 prompt 函数的脚本,请键入: 
PS C:\Windows\system32> (Get-Item Function:prompt).ScriptBlock

1.3 默认提示符

仅当 prompt 函数生成错误或未返回对象时,才会显示默认提示符。
默认 PowerShell 提示符为:
PS>
例如,以下命令将 prompt 函数设置为 $null,这是无效的。 因此会显示默认提示符。 
 function prompt {$null}
PS>
因为 PowerShell 附带内置提示符,所以通常不会看到默认提示符。 

1.4 内置提示符

PowerShell 包含内置 prompt 函数。 
function prompt {
  "PS $($ExecutionContext.SessionState.Path.CurrentLocation)$('>' * ($NestedPromptLevel + 1)) ";
  # .Link
  # https://go.microsoft.com/fwlink/?LinkID=225750
  # .ExternalHelp System.Management.Automation.dll-help.xml
}
该函数使用 Test-Path cmdlet 测试 $PSDebugContext 自动变量是否具有值。 
  • 如果 $PSDebugContext 具有值,则你在调试模式下运行,且 [DBG]: 已添加到提示符,如下所示: 
    • [DBG]: PS C:\ps-test>
  • 如果未填充 $PSDebugContext,则函数会将 PS 添加到提示符。 并且,该函数使用 Get-Location cmdlet 获取当前文件系统目录位置。 随后,它会添加一个右尖括号 (>)。 
    • PS C:\ps-test>
  • 如果处于嵌套提示符中,则该函数会将两个尖括号 (>>) 添加到提示符。
  • 如果 $NestedPromptLevel 自动变量的值大于 0,则处于嵌套提示符中。
  • 例如,在嵌套提示符中进行调试时,提示符类似于以下提示符:
    • [DBG] PS C:\ps-test>>>

2. 自定义当前会话的提示符

若要自定义提示符,请编写新的 prompt 函数。 该函数不受保护,因此可以覆盖它。
若要编写 prompt 函数,请键入以下内容:
function prompt { }
随后在大括号之间,输入创建提示符的命令或字符串。

2.1 几个简单的例子

例如,下面的提示符包含计算机名称:
PS C:\Windows\system32> function prompt {"PS [$Env:COMPUTERNAME]> "}
PS [TOMPC]>

下面的 prompt 函数包含当前日期和时间: 
PS [TOMPC]> function prompt {"$(Get-Date)> "}
12/11/2025 20:45:35>

路径+日期
function prompt {"$(Get-Location) $(Get-Date)> "}
格式化后的时间+路径
function prompt {"[ $(Get-Date -Format 'HH:mm:ss') ] $(Get-Location) >"}

2.2 检测是否管理员运行

还可以更改默认 prompt 函数:
例如,以下修改后的 prompt 函数在提升的会话中运行时,会将 [ADMIN]: 添加到内置的 PowerShell 提示符。
function prompt {
  $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
  $principal = [Security.Principal.WindowsPrincipal] $identity
  $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

$(if (Test-Path Variable:/PSDebugContext) { '[DBG]: ' }
    elseif($principal.IsInRole($adminRole)) { "[ADMIN]: " }
    else { '' }
  ) + 'PS ' + $(Get-Location) +
    $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}
使用“以管理员身份运行”选项启动 PowerShell 时,会显示类似于以下提示符的提示符: 
[ADMIN]: PS C:\Windows\system32>

2.3 显示历史记录ID

以下 prompt 函数显示下一个命令的历史记录 ID。 若要查看命令历史记录,请使用: Get-History 
function prompt {
   # The at sign creates an array in case only one history item exists.
   $history = @(Get-History)
   if($history.Count -gt 0)
   {
      $lastItem = $history[$history.Count - 1]
      $lastId = $lastItem.Id
   }

$nextCommand = $lastId + 1
   $currentDirectory = Get-Location
   "PS: $nextCommand $currentDirectory >"
}
PS: 7 C:\Windows\system32 >

PS: 7 C:\Windows\system32> get-history
  Id CommandLine
  -- -----------
   1 (Get-Item Function:prompt).ScriptBlock
   2  Get-Location
   3 function prompt {"PS [$Env:COMPUTERNAME]> "}
   4 function prompt {"$(Get-Date)> "}
   5 function prompt {...
   6 function prompt {...
PS: 8 C:\Windows\system32 >

2.4 随机更改颜色的提示符

以下提示符使用 Write-Host 和 Get-Random cmdlet 创建随机更改颜色的提示符。 因为 Write-Host 会写入当前主机应用程序,但不会返回对象,所以此函数包含 return 语句。 如果没有该语句,则 PowerShell 会使用默认提示符 PS>。 
function prompt {
    $color = Get-Random -Min 1 -Max 16
    Write-Host ("PS " + $(Get-Location) +">") -NoNewline -ForegroundColor $Color
    return " "
}
PS C:\Windows\system32>

3. 自定义配置文件

3.1 about_Profiles

与任何函数一样,prompt 函数仅存在于当前会话中。如前一章的例子。
PowerShell 配置文件是在 PowerShell 启动时运行的脚本。
  • 可以使用配置文件作为启动脚本来自定义环境。
  • 可以将如前一章的例子都添加到配置文件中。
  • 可以添加命令、别名、函数、变量、模块、PowerShell 驱动器等。
  • 还可以将其他特定于会话的元素添加到配置文件中,以便在每个会话中都可用,而无需导入或重新创建它们。
PowerShell 支持多个用户和主机程序的配置文件。但是,它不会为你创建配置文件。

3.2 配置文件类型和位置

PowerShell 支持多个范围限定为用户和 PowerShell 主机的配置文件。 你可以在计算机上拥有任何或全部这些配置文件。
PowerShell 控制台支持以下基本配置文件。 这些文件路径是默认位置。

  • 所有用户、所有主机 AllUsersAllHosts
    • Windows- $PSHOME\Profile.ps1
    • Linux - /opt/microsoft/powershell/7/profile.ps1
    • macOS - /usr/local/microsoft/powershell/7/profile.ps1
  • 所有用户,当前主机
    • Windows- $PSHOME\Microsoft.PowerShell_profile.ps1
    • Linux - /opt/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
    • macOS - /usr/local/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
  • 当前用户、所有主机
    • Windows- $HOME\Documents\PowerShell\Profile.ps1
    • Linux - ~/.config/powershell/profile.ps1
    • macOS - ~/.config/powershell/profile.ps1
  • 当前用户,当前主机 CurrentUserCurrentHost
    • Windows- $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
    • Linux - ~/.config/powershell/Microsoft.PowerShell_profile.ps1
    • macOS - ~/.config/powershell/Microsoft.PowerShell_profile.ps1
配置文件脚本按列出的顺序执行。 这意味着,
  • AllUsersAllHosts 配置文件中所做的更改可由任何其他配置文件脚本重写。
  • CurrentUserCurrentHost 配置文件始终最后运行。
在 PowerShell 帮助中,CurrentUserCurrentHost 最常称为 PowerShell 配置文件。

托管 PowerShell 的其他程序可以支持自己的配置文件。 
例如,Visual Studio Code (VS Code) 支持以下特定于主机的配置文件。 
  • 所有用户,当前主机 - $PSHOME\Microsoft.VSCode_profile.ps1
  • 当前用户、当前主机 - $HOME\Documents\PowerShell\Microsoft.VSCode_profile.ps1
配置文件路径包括以下变量:
  • $PSHOME 变量存储 PowerShell 的安装目录
  • $HOME 变量存储当前用户的主目录

3.3 $PROFILE 变量

$PROFILE
D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
$PROFILE 自动变量存储当前会话中可用的 PowerShell 配置文件的路径。
若要查看配置文件路径,请显示 $PROFILE 变量的值。 还可以在命令中使用 $PROFILE 变量来表示路径。
$PROFILE 变量存储“当前用户、当前主机”配置文件的路径。 其他配置文件保存在 $PROFILE 变量的注释属性中。
例如,$PROFILE 变量在 Windows PowerShell 控制台中具有以下值。
  • 当前用户、当前主机 - $PROFILE
  • 当前用户、当前主机 - $PROFILE.CurrentUserCurrentHost
  • 当前用户、所有主机 - $PROFILE.CurrentUserAllHosts
  • 所有用户、当前主机 - $PROFILE.AllUsersCurrentHost
  • 所有用户、所有主机 - $PROFILE.AllUsersAllHosts
由于每个用户和每个主机应用程序中 $PROFILE 变量的值发生更改,因此请确保在所使用的每个 PowerShell 主机应用程序中显示配置文件变量的值。
若要查看 $PROFILE 变量的当前值,请键入:
 $PROFILE | Select-Object *
AllUsersAllHosts       : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : D:\Tom\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 67
PS C:\Windows\system32>

可以在许多命令中使用 $PROFILE 变量。 例如,以下命令在记事本中打开“当前用户,当前主机”配置文件: 
 notepad $PROFILE

 $PROFILE
D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

以下命令确定是否在本地计算机上创建了“所有用户,所有主机”配置文件: 
 Test-Path -Path $PROFILE.AllUsersAllHosts
FALSE

3.4 创建配置文件

若要创建 PowerShell 配置文件,请使用以下命令格式:
if (!(Test-Path -Path <profile-name>)) {   New-Item -ItemType File -Path <profile-name> -Force }
例如,若要在当前 PowerShell 主机应用程序中为当前用户创建配置文件,请使用以下命令: 
if (!(Test-Path -Path $PROFILE)) {   New-Item -ItemType File -Path $PROFILE -Force }
    目录: D:\Tom\Documents\WindowsPowerShell
Mode                 LastWriteTime         Length Name
-a----        2025/12/11     21:10              0 Microsoft.PowerShell_profile.ps1
在此命令中,if 语句阻止覆盖现有配置文件。 将 $PROFILE 变量的值替换为要创建的配置文件的路径。 

创建所有用户所有主机的配置文件
if (!(Test-Path -Path $PROFILE.AllUsersAllHosts)) {   New-Item -ItemType File -Path $PROFILE.AllUsersAllHosts -Force }
    目录: C:\Windows\System32\WindowsPowerShell\v1.0
Mode                 LastWriteTime         Length Name
-a----        2025/12/12      0:12              0 profile.ps1

3.5 编辑配置文件

可以在文本编辑器(如记事本)中打开任何 PowerShell 配置文件。
若要在记事本的当前 PowerShell 主机应用程序中打开当前用户的配置文件,请键入:
PS C:\Windows\system32> notepad $PROFILE

若要打开其他配置文件,请指定配置文件名称。 例如,若要打开所有主机应用程序的所有用户的配置文件,请键入: 
notepad $PROFILE.AllUsersAllHosts

先来个简单的配置,将以下代码复制到配置文件中。会显示时间和当前路径。
function prompt {"[ $(Get-Date -Format 'HH:mm:ss') ] $(Get-Location) >"}

若要应用更改,保存配置文件。
  • 然后重启 PowerShell,
  • 或者(. $Profile )重新加载配置文件。
类似 linux 环境下的 source 命令。在 Powershell 中,使用点号 . 来重新加载指定的 ps1 文件。 由于 $Profile 变量保存了 ps1 文件的绝对路径,所以可以用下面的命令使改动实时生效。
. $Profile 
无法加载文件 D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,因为在此系统上禁止运行脚本。
… 
由于执行策略的默认设置是禁止所有脚本运行的,所有普通用户到这一步,加载配置文件时就会报错。

3.6 修改执行策略-允许本地脚本运行

查看当前执行策略
 Get-ExecutionPolicy
Restricted

为当前用户设置执行策略,允许运行本地脚本。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

再次查看当前执行策略
Get-ExecutionPolicy
RemoteSigned

然后再尝试加载脚本: 
. $Profile 
理论上应该会成功了。关闭会话,重新打开新的PowerShell,配置文件依然生效。

3.7 NoProfile 参数

设置的配置文件,那么每次打开都会加载相关自定义的内容。 若想回到无配置的状态,不必删除配置,可以用如下命令: 
powershell -NoProfile
更多参数,请看帮助:
Powershell -?

3.8 添加更多个性化设置

可以在 Windows 中使用 notepad.exe,或 VS Code。在 Linux 中使用 vi,或任何其他文本编辑器。
 code $PROFILE
 notepad $PROFILE
以下配置文件脚本包含许多自定义项的示例。 具体代码在如下页面里,微软网站提供的参考,直接复制运行可能会报错。有兴趣的可以自己研究研究。
此配置脚本提供以下个性化自定义的示例:
PowerShell-Docs 风格指南

4. 转载一个不错的配置

该文章分享了完整的脚本代码,包含注释。文章还对每一处做了详细的说明。
执行效果如图: 
包含功能: 
  • 判断是否为管理员权限;
  • 当前用户名;
  • 上一条命令完成后的时间;
  • 当前路径,然后换行;
  • 上一条命令运行的时间,秒数或分钟数。
可以根据个人喜好增减或调整顺序。
补充,可以添加一行: cd 目录, 修改初始路径。
function prompt {
    #Assign Windows Title Text
    $host.ui.RawUI.WindowTitle = "Current Folder: $pwd"
    #Configure current user, current folder and date outputs
    $CmdPromptCurrentFolder = Split-Path -Path $pwd -Leaf
    $CmdPromptUser = [Security.Principal.WindowsIdentity]::GetCurrent();
    $Date = Get-Date -Format 'dddd hh:mm:ss tt'
    # Test for Admin / Elevated
    $IsAdmin = (New-Object Security.Principal.WindowsPrincipal ([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
    #Calculate execution time of last cmd and convert to milliseconds, seconds or minutes
    $LastCommand = Get-History -Count 1
    if ($lastCommand) { $RunTime = ($lastCommand.EndExecutionTime - $lastCommand.StartExecutionTime).TotalSeconds }
    if ($RunTime -ge 60) {
        $ts = [timespan]::fromseconds($RunTime)
        $min, $sec = ($ts.ToString("mm\:ss")).Split(":")
        $ElapsedTime = -join ($min, " min ", $sec, " sec")
    }
    else {
        $ElapsedTime = [math]::Round(($RunTime), 2)
        $ElapsedTime = -join (($ElapsedTime.ToString()), " sec")
    }
    #Decorate the CMD Prompt
    Write-Host ""
    Write-host ($(if ($IsAdmin) { 'Elevated ' } else { '' })) -BackgroundColor DarkRed -ForegroundColor White -NoNewline
    Write-Host " USER:$($CmdPromptUser.Name.split("\")[1]) " -BackgroundColor DarkBlue -ForegroundColor White -NoNewline
    If ($CmdPromptCurrentFolder -like "*:*")
        {Write-Host " $CmdPromptCurrentFolder "  -ForegroundColor White -BackgroundColor DarkGray -NoNewline}
        else {Write-Host ".\$CmdPromptCurrentFolder\ "  -ForegroundColor White -BackgroundColor DarkGray -NoNewline}
    Write-Host " $date " -ForegroundColor White
    Write-Host "[$elapsedTime] " -NoNewline -ForegroundColor Green
    return "> "
} #end prompt function 

2025-12-12

Windows-Commands-prompt

1. prompt
	1.1 设置cmd提示符
	1.2 prompt /?
2. 绕道修改cmd的初始目录
	2.1 建立计划任务
	2.2 建立快捷方式
	2.3 运行
	2.4 其他简单但不完善的方式
3. 计划任务命令帮助
	3.1 schtasks /?
	3.2 schtasks /run /?
4. 查看环境变量命令

1. prompt

更改 Cmd.exe 命令提示符,可以显示所需的任何文本,例如当前目录、时间、日期或Windows 版本号。 
如果未使用参数,此命令会将命令提示符重置为默认设置,即当前盘符及目录,后跟大于号(>)。 

1.1 设置cmd提示符

目录加时间,最后回车换行
prompt $P$S$T$G$_
C:\Windows\System32 19:56:00.85>

在命令行里运行 prompt 命令的效果仅在当前窗口有效。要持续生效需要修改环境变量。
设置 → 系统 → 系统信息 → 高级系统设置 → 高级 → 环境变量 → 用户变量 → 新建
变量: prompt
值: $P$S$T$G$_
修改后,重新打开cmd即可看到更改生效了。

查看环境变量的prompt值已被修改。
set |find "PROMPT"
PROMPT=$P$S$T$G$_

1.2 prompt /?

更改 cmd.exe 命令提示符。
PROMPT [text]
  text    指定要包含在命令提示符中的文本和信息。

提示符可以由普通字符及下列特殊代码组成:
  $A    & (与号) Ampersand
  $B    | (坚线) 管道符号
  $Q     = (等号)
  $H    Backspace (删除前一个字符)
  $V    Windows 版本号
  $N    当前驱动器
  $P    当前驱动器及路径
  $C    ( (左括号)
  $F    ) (右括号)
  $L    < (小于号)
  $G    > (大于号)
  $D    当前日期
  $T    当前时间
  $S      (空格)
  $_    回车换行符 ENTER-LINEFEED
  $$    $ (美元符号)
  $E    ANSI 转义码(ASCII 码 27)

如果命令扩展被启用,PROMPT 命令会支持下列格式化字符:
  $+    根据 PUSHD 目录堆栈的深度,零个或零个以上加号(+)字符,一个推的层一个字符。
  $M    如果当前驱动器不是网络驱动器,显示跟当前驱动器号或空字符串有关联的远程名。

2. 绕道修改cmd的初始目录

通过计划任务,可以实现运行cmd时的自定义路径,普通用户及管理员运行均有效。方法有些曲折... 
先建立一个计划任务,再建立一个快捷方式,只要通过这个快捷方式打开cmd即可。

2.1 建立计划任务

右键开始菜单,选择计算机管理(cmd: compmgmt)
计算机管理中,依次点开: 系统工具\任务计划程序\任务计划执行库
菜单栏: 操作\创建任务

创建任务界面\常规 页签
填写名称,比如: RunCMD
□使用最高权限运行若勾选可以避免弹出UAC警告,按需勾选。

创建任务界面\操作 页签
点击 [新建]

新建操作界面\程序或脚本: C:\Windows\System32\cmd.exe
起始于(可选): D:\Tom\Documents
最后点击 [确定]

计划任务建好,可以右键计划任务名称,选择运行看看。
打开的cmd的起始目录为D:\Tom\Documents。

2.2 建立快捷方式

桌面空白处 右键菜单 选择 新建\快捷方式
快捷方式的位置填写: schtasks.exe /run /tn "RunCMD" 
点击 下一步 填写快捷方式名称,比如: cmdT 最后点击[完成]

2.3 运行

  • 然后双击创建的快捷方式打开cmd,起始目录为D:\Tom\Documents。
  • 右键选择以管理员身份运行cmd,起始目录也为D:\Tom\Documents。

2.4 其他简单但不完善的方式

以下是网上找到的多个不完善的版本。
管理员无效的快捷方式
cmd快捷方式,右键属性,修改起始位置即可。
但是仅正常打开有效。若使用管理员身份运行,起始位置又会回到原始状态。

未起作用的方法2
compmgmt 打开 [计算机管理] , 依次展开: 系统工具\本地用户和组\用户
找到需要修改的登录用户名,打开[用户]的属性页面。
选中 [配置文件] 页签,下方的主文件夹区域,本地路径里输入需要的路径,比如(D:\Tom)

受限的注册表法
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
新建值: autorun; 修改数据: cd /d C:\
这个办法没去尝试,目测仅限C盘... 

3. 计划任务命令帮助

3.1 schtasks /?

SCHTASKS /parameter [arguments]
描述: 允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。

参数列表:
    /Create         创建新计划任务。
    /Delete         删除计划任务。
    /Query          显示所有计划任务。
    /Change         更改计划任务属性。
    /Run            按需运行计划任务。
    /End            中止当前正在运行的计划任务。
    /ShowSid        显示与计划的任务名称相应的安全标识符。
    /?              显示此帮助消息。

Examples:
    SCHTASKS
    SCHTASKS /?
    SCHTASKS /Run /?
    SCHTASKS /End /?
    SCHTASKS /Create /?
    SCHTASKS /Delete /?
    SCHTASKS /Query  /?
    SCHTASKS /Change /?
    SCHTASKS /ShowSid /?

3.2 schtasks /run /?

SCHTASKS /Run [/S system [/U username [/P [password]]]] [/I] /TN taskname [/HRESULT] [/?]
描述: 按需运行计划任务。

参数列表:
    /S     system        指定要连接到的远程系统。
    /U     username      指定应在其中执行 schtasks.exe 的用户上下文。
    /P     [password]    为给定的用户上下文指定密码,如果省略则提示输入。
    /I                   忽略任何限制立即运行任务。
    /TN    taskname      指定要立即运行的任务的路径\名称。
    /HRESULT             为获得更出色的故障诊断能力,处理退出代码将采用 HRESULT 格式。
    /?                   显示此帮助消息。

示例:
    SCHTASKS /Run /?
    SCHTASKS /Run /TN "\备份\启动备份"
    SCHTASKS /Run /S system /U user /P password /I /TN "\备份\备份和还原"

4. 查看环境变量命令

  • 命令行(CMD)中:
    • set
    • msinfo32
  • PowerShell中:
    • ls env:
    • gci env:
    • dir env:
    • Get-ChildItem Env:
about_Environment_Provider

Sound

导航 (返回顶部) 1. Sound 1.1 声-音 1.2 声波的性质及特性 2. 声音频率 2.1 听力范围 2.2 VF-语音频率 2.3 人声基本频率 2.4 8度音阶表 2.5 综合表 3. 声波 3.1 Compression and she...