2026-03-19

Blender5-WindowUI

1. Blender主窗口
	1.1 Topbar
	1.2 Areas
	1.3 Status Bar
2. Workspaces
	2.1 Default Workspaces
	2.2 Blender 还默认添加了其他几个工作区
	2.3 附加工作区
3. Editors 编辑器
	3.1 通用 (General)
	3.2 动画 (Animation)
	3.3 脚本 (Scripting)
	3.4 数据 (Data)
4. Regions 区块
	4.1 3D视图编辑器的区块分布
	4.2 属性编辑器的区块分布
5. 多显示器
6. 偏好设置和启动文件

1. Blender主窗口

Blender 默认的主界面分为以下三个部分:
  • Topbar:位于最上方的[顶栏],包括主要菜单,用于保存、导入和导出文件、配置设置,以及渲染等其他功能。
  • Areas:位于中部的[区域],是主要工作区。
  • Status Bar:位于底部的[状态栏],显示按键建议和相关统计信息。

1.1 Topbar

位于最上方的[顶栏],包括主要菜单,用于保存、导入和导出文件、配置设置,以及渲染等其他功能。
从左到右依次是: 
  • [主菜单…] 分割线[|] 
  • [workspaces…]标题 [+]加号可添加更多工作区 (用于切换工作空间)
  • [Scene]场景选择,[ViewLayer]试图层选择。

1.2 Areas

Blender 窗口被划分为若干矩形,称为区域。
区域为编辑器保留屏幕空间,例如 3D 视图或大纲。每个编辑器都提供了一个特定的功能。

区域被分组为工作区,它们面向特定的任务(建模、动画等等)。
每个区域都可以自定义某个编辑器,且任意拆分以增加更多区域,或关闭不需要的区域。
  • 区域最大化
    • 菜单: 视图 ‣ 区域 ‣ 切换区域最大化
    • 快捷键: Ctrl-空格键
  • 专注模式
    • 菜单: 视图 ‣ 区域 ‣ 专注模式
    • 快捷键: Ctrl-Alt-空格键

1.3 Status Bar

状态栏位于 Blender 窗口的底部,显示上下文信息,如键盘快捷键、消息和统计信息。 状态栏可以通过禁用窗口菜单中的 显示状态栏 或从顶部边缘向下拖动来隐藏。 
  • 左侧
    • Keymap Information 状态栏的左侧显示鼠标按键的快捷方式和活动工具的快捷键。 在有工具栏的编辑器中,点击 Alt(或 macOS 上的 Option)会显示热键以切换到所需工具。 
  • 中间
    • Status Messages 状态信息:状态栏的中间显示有关正在进行的操作的信息。
      • Running Task 运行的任务
      • 显示当前运行任务(比如渲染或烘焙)的进度。 将鼠标指针悬停在进度条上会显示估计时间。单击取消按钮()可中止任务。
    • Report Message 报告信息
      • 信息性消息或警告,例如在保存文件之后。 它们会在短时间内消失。点击它们可以在信息编辑器中显示完整的信息。
  • 右侧
    • Resource Information 资源信息:状态栏的右侧显示 Blender 实例的相关信息。 可以通过在状态栏上点击 鼠标右键 或在偏好设置中选择显示哪些信息。
    • Scene Statistics 场景统计, 显示活动场景内数据的信息。
      • Collection 集合:活动集合的名称。
      • Active Object 活动物体:活动的选中物体的名称。
      • Geometry 几何:根据模式和物体类型的不同显示当前场景的信息。这可以是顶点、面、三角形或骨骼的数量。
      • Objects 物体:所选物体的数量和物体的总数。

2. Workspaces

2.1 Default Workspaces

Blender 的默认启动在主区域显示了 “布局 (Layout)” 工作区。 这个工作区是一个通用工作区,用于预览你的场景,包含以下编辑器: 
  • 左上角的 3D 视图。[3D Viewport]
  • 右上角的大纲。[Outliner]
  • 右下角的属性。[Properties]
  • 左下角的时间线。[Timeline]

2.2 Blender 还默认添加了其他几个工作区

  • Modeling 建模:使用建模工具修改几何体。
  • Sculpting 雕刻:使用雕刻工具修改网格。
  • UV Editing UV 编辑:将图像纹理坐标映射至三维表面。
  • Texture Paint 纹理绘制:用于在3D视图中为图像纹理上色。
  • Shading 着色:用于为渲染指定材质属性。
  • Animation 动画:使物体属性随时间发生变化。
  • Rendering 渲染:用于查看以及分析渲染结果。
  • Compositing 合成:图像和渲染信息的合并以及后期处理。
  • Geometry Nodes 几何节点:使用几何节点程序化建模。
  • Scripting 脚本:用于与 Blender 的 Python API 交互和编写脚本。

2.3 附加工作区

添加新工作区时,Blender 还提供了其他几组可供选择的工作区:
  • 二维动画
    • 二维动画: 蜡笔绘画的通用工作区。
    • 全屏二维画布: 类似 “二维动画” 但有个更大的画布。
  • VFX
    • 遮罩: 为合成或视频编辑创建二维遮罩。
    • 运动追踪: 用于计算摄像机运动和稳定视频片段。
  • 视频编辑
    • 视频编辑: 将媒体排序整合到一个视频中。

3. Editors 编辑器

Blender 提供了许多不同的编辑器,用于显示和修改数据的不同方面。 编辑器包含在区域中,该编辑器确定其在 Blender 窗口中的大小和位置。 每个区域都可能包含任何类型的编辑器。 
编辑器类型 选择器,即标题左侧的第一个按钮,允许你改变该区域的编辑器。 也可以同时在不同的区域打开同一个编辑器类型。 

3.1 通用 (General)

  • 3D 视图 (3D Viewport)
  • 图像编辑器 (Image Editor)
  • UV 编辑器 (UV Editor)
  • 合成器 (Compositor)
  • 纹理节点 (Texture Nodes)
  • 几何节点编辑器 (Geometry Node Editor)
  • 着色器编辑器 (Shader Editor)
  • 视频序列编辑器 (Video Sequencer)
  • 影片剪辑编辑器 (Movie Clip Editor)

3.2 动画 (Animation)

  • 动画摄影表 (Dope Sheet)
  • 时间线 (Timeline)
  • 曲线编辑器 (Graph Editor)
  • 驱动器编辑器 (Drivers Editor)
  • 非线性动画 (Nonlinear Animation)

3.3 脚本 (Scripting)

  • 文本编辑器 (Text Editor)
  • Python 控制台 (Python Console)
  • 信息编辑器 (Info Editor)

3.4 数据 (Data)

  • 大纲视图 (Outliner)
  • 属性编辑器 (Properties Editor)
  • 文件浏览器 (File Browser)
  • 资产浏览器 (Asset Browser)
  • 电子表格 (Spreadsheet)
  • 偏好设置 (Preferences)

4. Regions 区块

Blender 中的每个编辑器都分成几个区块(Region)。 区块可以具有较小的结构元素,如选项卡和面板,其中包含按钮、控件和小部件。 

4.1 3D视图编辑器的区块分布

在添加一个立方体后,3D视图编辑器显示的侧栏和调整上一步操作面板的区块。
  • 顶部的 标题栏(绿色),
  • 中间的 主区块(黄色),
  • 左侧的 工具栏(蓝色),快捷键[T],
  • 右侧的 侧栏(红色),快捷键[N],
  • 调整上一步操作面板(粉色)。

4.2 属性编辑器的区块分布

属性编辑器有左侧的 选项卡 (Tabs) 和右侧的多个 面板 (Panels) 组成。

5. 多显示器

Blender支持多显示器,以基础建模为例,双显示器环境下。
默认主显示器,使用默认主界面,用于建模。
窗口菜单下,新建窗口,用于随时从多个角度观察模型。

多显示器
主窗口左上角菜单列: 窗口 \ 新建窗口
新建的窗口 可以拖动到其他显示器,组成多显示器模式。

三视图
快捷键: Ctrl + Alt + Q
右上角的透视模式可以改为摄像机镜头。渲染视图

渲染视图
快捷键: 小键盘的数字 [0]
3D视图右边 [N] 辅助栏 \ 视图 \ 视图锁定 \ 摄像机到视图方向 □
勾选后,方便调整摄像头位置及方向,设置好后别忘了取消勾选。

6. 偏好设置和启动文件

快捷键: (Ctrl + ,)
  • 菜单栏\编辑\偏好设置
    • 界面\状态栏\场景统计数据 (勾选)
    • 界面\语言\简体中文
    • 界面\语言\新建数据 (建议取消勾选) 新建的物体则已英文命名,避免潜在的兼容问题... 
    • 试图导航\缩放\缩放至鼠标位置 (根据喜好勾选)
  • 其他设置: 
    • 菜单栏\文件\外部数据\自动打包资源 (勾选) 保存时自动包含相关贴图等素材
最后别忘了:菜单栏\文件\默认\保存启动文件

2026-03-04

Video-file-size

1. 视频文件大小计算公式
2. 视频文件关键参数
	2.1 Resolution 分辨率
	2.2 Frame rate 帧率
	2.3 Bitrate 比特率
3. 视频压缩
	3.1 分辨率与最低比特率参考对照表
	3.2 ffmpeg压缩命令
	3.3 FfmpegFreeUI

1. 视频文件大小计算公式

比特率(Mb/s) x 视频时长(s) ÷ 8 = 视频文件大小(MB) 
视频文件大小基本可以按该公式计算。计算结果和实际文件大小相差无几。

2. 视频文件关键参数

2.1 Resolution 分辨率

解析度(英语:resolution)又称分辨率(resolving power),泛指量测或显示系统对细节的分辨能力。
此概念可以用时间、空间等领域的量测。
影像分辨率(image resolution)则专指影像、图像记录物体细部能力的一种度量,此时又称解像度、解像力。

2.2 Frame rate 帧率

帧率(英语:frame rate)是用于测量显示帧数的度量。
测量单位为“每秒显示帧数”(frame per second,FPS)或“赫兹”,FPS通常用于描述影片、电子绘图或游戏每秒播放多少帧。 
较高的帧率在一秒钟内捕捉更多帧,特别是在有快速移动物体的环境中,影片的视觉呈现更细致流畅。 
常见的帧率有: 
  • 24fps:(胶片)电影标准
  • 25fps:PAL标准(欧洲, 亚洲, 澳洲等地的电视广播格式), SECAM(法国, 俄国, 部分非洲等地的电视广播格式)
  • 29.97fps: NTSC标准(美国, 加拿大, 日本等地的电视广播格式)
  • 60P:适合减慢做慢动作
  • 120P:做更慢的慢动作

2.3 Bitrate 比特率

比特率(英语:Bit rate或Bit-rate/Bitrate,变量简写为R)在电信和计算领域是指单位时间内传输送或处理的比特数量。
比特率经常在电信领域用作连接速度、传输速度、信息传输速率和数字带宽容量的同义词。
在数字多媒体领域,比特率是单位时间播放连续的媒体如压缩后的音频或视频的比特数量。
比特率规定使用“比特每秒”(bit/s或bps)为单位。
码流=文件大小(字节*8位)/视频持续时间(秒)例如:2400MBx8 / 480 秒 = 40Mbps

较高的比特传输率将可容纳更高的视频质量,即更大的视频文件。一些典型比特率: 
  • VCD: 1Mbps
  • DVD: 5Mbps
  • HDTV: 20Mbps
  • Blu-ray: 40Mbps
  • Ultra HD Blu-ray: 100Mbps

3. 视频压缩

视频文件当前使用最多的是H264,兼容性也最好。更新的是H265(hevc)
根据分辨率,设置适当的比特率,能有效压缩文件大小,且保留品质。

3.1 分辨率与最低比特率参考对照表

名称 分辨率 备注 比特率
(Mbps)
时长
(s)
bit → Byte
(/8)
M → G
(/1024)
Size
(GB)
水平 垂直 X Y
8k 7680 4320 UHDTV2 40 6000 8 1024 29.3
4k 2160p 3840 2160 UHD 10 6000 8 1024 7.3
2k 1440p 2560 1440 QHD 5 6000 8 1024 3.7
1080p 1920 1080 Full HD 3 6000 8 1024 2.2
1600 900 2 6000 8 1024 1.5
720p 1280 720 HD 1.5 6000 8 1024 1.1
⇧列出 (16:9) 的显示器分辨率 比特率(Mb/s) * 时长(s) /8 /1024 = Size(GB)

公式: 比特率(Mb/s) * 时长(s) /8 /1024 = Size(GB)
计算时长100分钟的视频文件在指定比特率下的参考大小。
  • 这里分辨率: (720p, 1080p) 的比特率分别为(1.5~3Mbps), 这个数值算是经验参数,查看了很多下载的视频,文件紧凑,品质尚可的都是这个数值。
  • 至于分辨率: (2k以上的),根据上面参数的近似比例放大,不一定对,仅供参考。

3.2 ffmpeg压缩命令

调整分辨率
ffmpeg -i m4k.mkv -vf scale=1920:-2 -map 0 c3.mkv
-map 0 保留所有音轨和字幕轨。若不加(-map 0),则只保留第一个音轨和第一个字幕轨。
注意,虽然能保留所有字幕轨,但原本字幕格式可能会被重新编码,若出现字幕显示异常。可用如下复制参数: 
  • 复制参数: -map 0:a -c:a copy -map 0:s -c:s copy
  • 调整帧率: -r 30
  • 调整码率: -b:v 2M

调整为更高效的编码格式. Intel CPU 使用libx265:
-c:v libx265 -crf 26
-crf 23 表示视频质量,值越小,视频质量越高,文件越大。(范围:0~51,推荐23)
ffmpeg -i "<输入>" -c:v libx265 -preset medium -crf 25 -map 0:a -c:a copy -map 0:s -c:s copy "<输出>"

指定比特率: 
ffmpeg -i "<输入>" -c:v libx265 -b:v 2M -map 0:a -c:a copy -map 0:s -c:s copy "<输出>"

  • NVIDIA显卡 使用 hevc_nvenc 代替上面的libx265
  • M1芯片 使用 hevc_videotoolbox 代替上面的libx265
对于M1 Mac用户,hevc_videotoolbox 是视频转码和压缩的最佳替代品,性能远超单纯依靠CPU的 libx265。

苹果M1芯片使用如下命令压缩 (H264格式4k视频, 比特率50Mbps)
比特率50M改为8M,改用H265压缩,文件缩小到16%
ffmpeg -i m4k.mp4 -map 0:v -c:v hevc_videotoolbox -b:v 8M -map 0:a -c:a copy  m265-8M.mp4 
同样的文件,修改分辨率,设定比特率2M,文件缩小到4%。
ffmpeg -i m4k.mp4 -vf scale=1920:-2 -b:v 2M -map 0 m1920-2m.mp4 
若包含多音轨,多字幕,使用如下map的copy,保留全部。
ffmpeg -i m4k.mkv -map 0:v -c:v hevc_videotoolbox -b:v 2M -map 0:a -c:a copy -map 0:s -c:s copy m265-2M.mkv
macOS-m1芯片使用hevc_videotoolbox:h265压缩,比特率的2M或3M,需要M大写。 

3.3 FfmpegFreeUI

不想使用ffmpeg命令,可以使用这个开源工具。ffmpeg的图形界面。
在参数面板设置好参数,在参数总览下可以看到生成的实际命令行。

2025-12-17

Windows-Execution-Policies

1. about_Execution_Policies
	1.1 POWERSHELL 执行策略
	1.2 执行策略作用域
2. 使用 PowerShell 管理执行策略
	2.1 查看当前的有效执行策略
	2.2 更改执行策略
	2.3 删除执行策略
	2.4 为某个会话设置一个不同的执行策略
	2.5 使用组策略管理执行策略
3. 未签名的脚本
	3.1 未签名的脚本包含:
	3.2 本地脚本与网络下载脚本的区别
	3.3 一秒解锁网络下载脚本
	3.4 临时绕过策略执行特定脚本
	3.5 直接运行网络未签名脚本
	3.6 小结
4. 执行策略可能会失败的原因

1. about_Execution_Policies

PowerShell 执行策略是一项安全功能,用于控制 PowerShell 加载配置文件和运行脚本的条件。  此功能有助于防止恶意脚本的执行。 

本地计算机和当前用户的执行策略存储在注册表中。
无需在 Windows PowerShell 配置文件中设置执行策略。
某个特定会话的执行策略仅存储在内存中,当关闭会话时,该执行策略会丢失。

执行策略不是限制用户操作的安全系统。
例如,当用户无法运行脚本时,可以通过在命令行键入脚本内容轻松绕过策略。
相反,执行策略帮助用户设置基本规则并阻止他们无意中违反规则。

1.1 POWERSHELL 执行策略

ExecutionPolicy
执行策略
已签名 未签名 行为描述 概述 组策略
选项
本地 远程(网络)
Restricted No No No 默认策略,禁止所有. 包括: (.ps1xml)格式, (.psm1)模块, (.ps1)PS配置 受限 n
AllSigned Yes No No 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。 仅签名 Y
RemoteSigned Yes Yes No 本地脚本可运行,下载的脚本需签名 (Windows Server 2012 R2 默认执行策略) 普通 Y
UnRestricted Yes Yes Yes (提示) 允许运行所有脚本,但下载的未签名脚本会提示确认 (非 Windows 的默认执行策略) 非受限 Y
Bypass Yes Yes Yes 无任何限制,无警告或提示!(高风险) 无限制 n
Undefined - - - 当前作用域中未设置执行策略。 未定义 n
Undefined 表示当前作用域中未设置执行策略。
若所有作用域都没有设置,则默认为: Restricted, 禁止所有脚本。

1.2 执行策略作用域

优先级 Scope 作用域 执行策略影响范围 存储在:
最高 MachinePolicy 当前计算机上的所有用户 通过组策略为计算机的所有用户设置
^ UserPolicy 当前计算机上的当前用户 通过组策略为计算机的当前用户设置
^ PROCESS 当前的 PowerShell 会话 环境变量 $env:PSExecutionPolicyPreference.
关闭 PowerShell 会话时,将删除变量和值。
^ CURRENTUSER 当前计算机上的当前用户 存储在 HKCU 注册表子项
最低 LOCALMACHINE 当前计算机上的所有用户 HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
作用域优先级:如上表从上往下依次降低。也是命令 (Get-ExecutionPolicy -list) 列出的顺序。
  • 若所有作用域都没有设置执行策略,即同为 [Undefined], 则默认为: Restricted, 禁止所有脚本。
  • 若多个作用域设置了执行策略,则优先级高的生效,优先级低的会被忽略。

2. 使用 PowerShell 管理执行策略

2.1 查看当前的有效执行策略

获取当前 PowerShell 会话的有效执行策略
 Get-ExecutionPolicy
Restricted

若要获取影响当前会话的所有执行策略,并按优先顺序显示它们,请键入: 
 Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

以下命令获取 CurrentUser 作用域的执行策略。 
 Get-ExecutionPolicy -Scope CurrentUser
Undefined

2.2 更改执行策略

若要更改你计算机上的 Windows PowerShell 执行策略,请使用 Set-ExecutionPolicy cmdlet。
更改会立即生效,你无需重新启动 Windows PowerShell。
  • 如果为 Scopes LocalMachine 或 CurrentUser 设置执行策略,更改将保存在配置文件中,并在再次更改之前保持有效。
  • 如果为 Process 范围设置执行策略,则不会将其保存在配置文件中。 执行策略将一直保留,直到当前进程和任何子进程关闭。

若要更改你的执行策略,请键入:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
不指定作用域,则默认为本机

若要设置某个特定作用域中的执行策略,请键入 
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

更改执行策略的命令会成功,但不一定会成为有效的执行策略。
例如,用于设置本地计算机的执行策略的命令可能成功,但会被当前用户的执行策略覆盖。优先级更高的生效。

2.3 删除执行策略

若要删除某个特定作用域的执行策略,则将执行策略的值设置为 Undefined。
例如,若要删除本地计算机的所有用户的执行策略,请键入:
Set-ExecutionPolicy Undefined
或者键入: 
Set-ExecutionPolicy Undefined -scope LocalMachine
如果未在任何作用域中设置执行策略,则有效的执行策略是 Restricted,它是默认执行策略。 

2.4 为某个会话设置一个不同的执行策略

可以使用 PowerShell.exe 的 ExecutionPolicy 参数为新的 Windows PowerShell 会话设置执行策略。 策略仅影响当前会话和子会话。
例如:
PowerShell.exe -ExecutionPolicy AllSigned
设置的执行策略不是存储在注册表中,而是存储在 $env:PSExecutionPolicyPreference 环境变量中。 当关闭在其中设置了策略的会话时,会删除变量。不能通过编辑变量值来更改策略。 
在会话期间,为会话设置的执行策略优先于在注册表中为本地计算机或当前用户设置的执行策略。 但是,它并不优先于通过使用组策略设置的执行策略。优先级见前面的表格。

2.5 使用组策略管理执行策略

可以使用“启用脚本执行”组策略设置来管理计算机的执行策略。 组策略设置覆盖所有作用域中设置的执行策略。
“启用脚本执行”策略设置如下所示:
  • -- 如果禁用“启用脚本执行”,则脚本不会运行。这等效于“Restricted”执行策略。
  • -- 如果启用“启用脚本执行”,则可以选择一个执行策略。组策略设置等效于以下执行策略设置。
    • Group Policy                Execution Policy  
    • 允许所有脚本          Unrestricted
    • 允许本地脚本和远程签名脚本         RemoteSigned
    • 只允许签名脚本           AllSigned
  • '-- 如果未配置“启用脚本执行”,则它将不起作用。 在 Windows PowerShell 中设置的执行策略是有效的。

PowerShellExecutionPolicy.adm 和 PowerShellExecutionPolicy.admx 文件将“启用脚本执行”策略添加到组策略编辑器中的计算机配置节点和用户配置节点中。路径如下: 
  •     Administrative Templates\Windows Components\Windows PowerShell
  • [计算机配置] 或 [用户配置]  → 管理模板 → Windows 组件 → Windows PowerShell → 启用脚本执行
设置后,让策略立即生效命令: 
 gpupdate /force
[计算机配置] 节点中设置的策略 优先于 [用户配置] 节点中设置的策略。 

Microsoft 下载中心提供 PowerShellExecutionPolicy.adm 文件。有关详细信息,请访问 PowerShell 的管理模版 
about_Group_Policy_Settings 

3. 未签名的脚本

3.1 未签名的脚本包含:

  • 网络地址未签名脚本,比如: http://127.0.0.1:9000/Microsoft.PowerShell_profile.ps1
  • 本地未签名脚本,本机生成的脚本,比如: Microsoft.PowerShell_profile.ps1
  • 网络下载的未签名脚本。~\download\Microsoft.PowerShell_profile.ps1

3.2 本地脚本与网络下载脚本的区别

在 Windows 中,Internet Explorer 和 Microsoft Edge 等程序会向下载的文件添加备用数据流。 这会将文件标记为“来自 Internet”。 
如果 PowerShell 执行策略是 RemoteSigned,PowerShell 将不会运行从 Internet 下载的未签名脚本,其中包括电子邮件和即时消息程序。
可以对脚本进行签名,或选择在不更改执行策略的情况下运行未签名的脚本。

从 PowerShell 3.0 开始,可以使用 cmdlet 的 Get-Item 的 Stream 参数来检测因从 Internet 下载而被阻止的文件。  使用 Unblock-File cmdlet 解除阻止脚本,以便可以在 PowerShell 中运行这些脚本。 

下载文件的其他方法可能不会将文件标记为来自 Internet 区域。 一些示例包括: 
curl.exe; Invoke-RestMethod; Invoke-WebRequest.

查看当前目录下来自网络的未签名文件
  • 在脚本文件上,右键 → [属性] 下方有 [解除锁定]的待选框,该文件即为网络下载的带有Internet标记的网络脚本。
  • 使用命令行查看 带有Internet标记的网络脚本
    • [0.02 sec] > Get-Item * -Stream "Zone.Identifier" -ErrorAction SilentlyContinue
    • PSPath        : Microsoft.PowerShell.Core\FileSystem::D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1:Zone.Identifier
    • PSParentPath  : Microsoft.PowerShell.Core\FileSystem::D:\Tom\Documents\WindowsPowerShell
    • PSChildName   : Microsoft.PowerShell_profile.ps1:Zone.Identifier
    • PSDrive       : D
    • PSProvider    : Microsoft.PowerShell.Core\FileSystem
    • PSIsContainer : False
    • FileName      : D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    • Stream        : Zone.Identifier
    • Length        : 125

3.3 一秒解锁网络下载脚本

如果 PowerShell 执行策略是 RemoteSigned,则会阻挡网络下载的脚本。但只需解锁,将网络下载脚本变成本地脚本即可。
有很多方法实现这个过程:
  • [下载的脚本文件] 上右键 → 点击 [属性] → 勾选下方的 [解除锁定]
  • 使用文本编辑器 打开 [下载的脚本文件] → [另存为],新保存的文件就是本地脚本了… 
  • 使用命令解锁,下面是解锁的不同写法: 
    •  dir D:\Downloads\*PowerShell* | Unblock-File
    •  Unblock-File -Path D:\Downloads\PowerShell.ps1
    •  Get-Item D:\Downloads\PowerShell.ps1 | Unblock-File
获取Unblock-File命令帮助
  • get-help Unblock-File
  • get-help Unblock-File -examples
  • get-help Unblock-File -detailed

3.4 临时绕过策略执行特定脚本

PowerShell.exe -ExecutionPolicy Bypass -File "D:\Downloads\PowerShell.ps1"
仅对当前会话有效,退出当前PowerShell后策略自动恢复

3.5 直接运行网络未签名脚本

在本地包含脚本的目录下执行如下命令,启动简单web服务
python -m http.server 9000 
通过本机IP即可访问该文件夹的脚本文件
http://127.0.0.1:9000/Microsoft.PowerShell_profile.ps1

通过 Invoke-Expression 命令从网络加载 PowerShell 脚本. 效果同本地文件... 
IEX (New-Object Net.WebClient).DownloadString('http://127.0.0.1:9000/Microsoft.PowerShell_profile.ps1')
这个脚本文件本身,即使有来自Internet的标记,不需要解锁,就能加载执行。

查看相关帮助
  • Iex -?
  • get-help Invoke-Expression -examples
  • get-help Invoke-Expression -detailed

加载 PowerShell 脚本 

3.6 小结

网络下载的未签名脚本,如上所述,很多方法,非常容易就能解锁变为本地脚本。
再回看前面的 [执行策略表格] 对于网络下载的未签名脚本的态度:
  • RemoteSigned,No,但是可以轻松1秒解锁… 
  • UnRestricted,Yes (提示)
  • Bypass,Yes
这样看来这3个策略其实差别不大... 

4. 执行策略可能会失败的原因

出现以下错误: 
AuthorizationManager check failed. 

PowerShell 使用 Windows 桌面 Shell 中的 API (explorer.exe) 来验证脚本文件的区域。 
Windows Shell 在 Windows Server Core 和 Windows Nano Server 上不可用。

如果 Windows 桌面 Shell 不可用或无响应,也可能在任何 Windows 系统上收到此错误。 
例如,在登录期间,PowerShell 登录脚本可能会在 Windows 桌面准备就绪之前开始执行,从而导致失败。

使用 ByPass 或 AllSigned 的执行策略不需要区域检查,以避免问题。

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-13

Windows-UAC

1. UAC
1.1 UAC选项
1.2 触发UAC警告条件
1.3 避免UAC提示的方法
2. 提供管理员权限-任务计划方式
2.1 Windows 任务计划
2.2 快捷方式
2.3 运行
2.4 更便捷的UAC白名单小工具
3. 不提供管理员权限-RUNASINVOKER
3.1 RUNASINVOKER
3.2 补充说明
4. 应用程序兼容性工具包 (ACT)

1. UAC

用户帐户控制 (UAC) User Account Control 旨在防止对 Windows 进行未经授权的更改。 
当作需要管理员级权限时,UAC 会提示你批准或拒绝更改。这有助于保护 Windows 设备免受恶意软件和未经授权的修改的影响。 

可以通过打开控制面板 > 系统和安全 > 更改用户帐户控制设置来更改 UAC 行为。
将滑块移动到所需的通知级别,然后选择“ 确定”以保存更改。

1.1 UAC选项

选项如下,中间2项基本一致,只是第三项更加友好些。
  • 始终通知
  • 仅当应用尝试对我的计算机进行更改时通知我 (默认)
  • 仅当程序尝试更改我的计算机时通知我 (不调暗我的桌面)
  • 从不通知 (禁用 UAC)

1.2 触发UAC警告条件

  • 安装或卸载程序
  • 账户设置
  • 系统各种设置
  • 注册表操作
  • 访问系统目录,程序目录
  • 访问其他用户目录
  • 安装驱动
  • 设置共享
  • … 
更详细的列表: 

1.3 避免UAC提示的方法

禁用 UAC 是不推荐的。但可以针对个别软件进行相应的设置,规避UAC提示。

避免UAC提示的方法有: 
  • 提供管理员权限
    • Windows 任务计划
    • 更便捷的UAC白名单小工具
  • 不提供管理员权限
    • [RUNASINVOKER] 强制软件 [以普通用户身份运行] 以取消 UAC 提示
  • 微软应用程序兼容性工具包 (ACT) Application Compatibility Toolkit

2. 提供管理员权限-任务计划方式

方法有点绕,效果还不错。步骤是先建立一个任务计划,再建立对应的快捷方式。参照原文连接:

2.1 Windows 任务计划

 右键开始菜单,选择计算机管理(cmd: compmgmt)
计算机管理中,依次点开: 系统工具\任务计划程序\任务计划执行库
菜单栏: 操作\创建任务
  1. 创建任务界面\常规页签 
    • 填写名称,比如: RunCMDAdmin
    • 勾选 使用最高权限运行
  2. 创建任务界面\操作页签
    • 点击 [新建]
  3. 新建操作界面\
    • 程序或脚本: C:\Windows\System32\cmd.exe 
    • 起始于(可选): D:\Tom\Documents
      • 说明: 起始于路径,可以定义打开cmd时的初始位置,对于需要将命令执行结果写入文本文件的需要。可以输入保存文件的位置。
    • 点击[确定]
计划任务建好,可以右键计划任务名称,选择运行看看。
打开的cmd是管理员权限,且过程没有弹出UAC警告。

2.2 快捷方式

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

2.3 运行

双击创建的快捷方式就会发现不会弹出 UAC 并且 [以管理员身份运行] 了。 

2.4 更便捷的UAC白名单小工具

第三方小工具,把前面的计划任务到快捷方式的操作打包成的便捷的小工具。
约50k的小工具,界面很简单,下载下来就能用。原理就是前面的添加计划任务方式。

3. 不提供管理员权限-RUNASINVOKER

强制软件 [以普通用户身份运行] 以取消 UAC 提示。参照原文连接:

3.1 RUNASINVOKER

regedit 打开注册表编辑器
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
进入 Layers 文件夹后,新建一个 [字符串值]。
字符串名称就是你指定的软件完整路径, 无论路径里有没有空格都不需要加上引号!比如: 
F:\Program Files\HoYoPlay\games\Genshin Impact game\GenshinImpact.exe

然后右键刚刚新建的字符串 - 修改 - 数值数据:RUNASINVOKER
完成,可以回到桌面打开GenshinImpact看看,没有UAC警告,运行正常。

注意:如果你打算添加新字符串值时,发现该注册表项已存在了,那么说明你设置过该软件的 兼容性(右键 - 属性 - 兼容性 选项卡),遇到这种情况,你只需追加到最后就行了。
例如注册表已存在的数值数据为:~ WIN7RTM
那么就改成:~ WIN7RTM RUNASINVOKER

3.2 补充说明

原文添加了 WeGame 的 RUNASINVOKER。我这里添加了 GenshinImpact。
想想也是,作为普通游戏,只是在首次安装游戏时需要权限。平时运行时并不需要管理员权限。
最多在新账户首次登录时或许需要权限,比如将用户信息写入注册表,或者建立新账户目录等... 并不需要打开游戏时就获取管理员权限。
安全的做法是打开游戏并不需要管理员权限,但当修改新账号时触发新账号验证程序的时刻触发 UAC 警告。提升权限完成验证。完成后则回到普通用户模式运行程序。

总结一下,游戏类的都可以用这种方式规避UAC警告。不要使用前面计划任务提权的方式。
如果游戏程序拥有管理员权限,那么在你全屏沉浸式游玩的过程中,游戏程序会不会在后台做些奇怪的事。若设置为RUNASINVOKER,那么UAC会阻挡奇怪的事情发生。

注意事项:这种方法仅适用于需要较低权限运行的程序,对于需要管理员权限才能正常工作的程序,应谨慎使用,以免影响程序功能。

4. 应用程序兼容性工具包 (ACT)

Application Compatibility Toolkit
Microsoft应用程序兼容性工具包(ACT)是一种生命周期管理工具,可帮助识别和管理整个应用程序组合,降低解决应用程序兼容性问题所涉及的成本和时间,并帮助快速部署 Windows 和 Windows 更新。 
Windows 10 应用程序兼容性工具包随 Windows 10 ADK 一起发布: 

使用 应用程序兼容性工具包 ACT ,避免UAC警告。操作过程貌似繁琐。相关帖子很多,但都是很多年前的。
现在,ACT已经集成到 Windows10 ADK(生成WindowsPE就需要用这个ADK)
有兴趣的人可以自己下载安装看看。

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

2025-12-10

Windows-GameBar-ErrorLog

1. ms-gamingoverlay
	1.1 安装相关应用及组件
	1.2 注册表关闭
	1.3 注册表关闭-方式2
	1.4 组策略禁用
2. Xbox Game Bar
	2.1 xbox地区问题
3. Reg-help

1. ms-gamingoverlay

ms-gamingoverlay是Windows 10/11内置的Xbox游戏栏(Game Bar)的协议方式。
它提供了一个叠加层,让玩家在不离开游戏的情况下,可以方便地进行以下操作:
游戏录制和截图, 与Xbox朋友聊天, 使用其他小工具...

当出现“需要新应用打开此ms-gamingoverlay”的提示时, 通常是因为相关应用或文件被意外删除,导致系统无法正常启动游戏栏功能。
解决方法:
  1. 打开“开始”菜单,进入“设置”。
  2. 点击“游戏”选项。
  3. 在左侧菜单中选择“Xbox Game Bar”。
  4. 关闭“使用Xbox Game Bar进行游戏剪辑、聊天等”的开关即可。

但是,这个标准做法有时不管用!即使完成了上述的关闭步骤,打开游戏时还是会弹出提示:
需要新应用打开此ms-gamingoverlay... 
安装弹出提示: 在 Microsoft Store 中查找应用,按“ms-gamingoverlay”这个名称却找不到... 

解决方法主要有2种:
  • 安装缺失的应用或组件;
  • 或者在注册表里禁用(若不需要这个功能)。

1.1 安装相关应用及组件

安装ms-gamingoverlay相关应用及组件
首先查看本机有相关的那些组件。
> get-appxpackage |select-string -pattern "xbox"
> get-appxpackage *xbox* | find "Name              :"
  • Microsoft.XboxGameCallableUI
  • Microsoft.XboxIdentityProvider
  • Microsoft.XboxSpeechToTextOverlay
  • Microsoft.XboxGamingOverlay
本机当前有如上4个,对照缺少那个就装那个。
不想一个一个装,也可以直接恢复所有初始APP
Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} 
这通常能解决弹出 [ms-gamingoverlay] 提示的问题。

若还会弹出 [ms-gamebar] 的提示。
可以在 Microsoft Store 中可以找到 [Xbox Game Bar] ,安装一下即可。
若还有异常可以使用dism和sfc检查修复一下。

1.2 注册表关闭

regedit 打开注册表,导航到如下位置: 
计算机\HKEY_CURRENT_USER\System\GameConfigStore
右边的 [GameDVR_Enabled] 数值为1,改为0即可。

若没有这一项,可以手动添加,或者使用 PowerShell 编辑注册表,如下所示:
reg add HKCU\System\GameConfigStore /f /t REG_DWORD /v "GameDVR_Enabled" /d 0
还有下面这一项,我这儿原本没有,就直接手动添加了,如下所示:
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR /f /t REG_DWORD /v "AppCaptureEnabled" /d 0

1.3 注册表关闭-方式2

同上,一样是操作注册表,但操作另外一个注册表目录(HKCR),达到停用的效果。
下载如下批处理执行即可。下载后可用记事本打开查看注册表命令。

Run_As_Admin_Disable_Gamebar.bat
reg add HKCR\ms-gamebar /f /ve /d URL:ms-gamebar 2>&1 >''
reg add HKCR\ms-gamebar /f /v "URL Protocol" /d " " 2>&1 >''
reg add HKCR\ms-gamebar /f /v "NoOpenWith" /d " " 2>&1 >''
reg add HKCR\ms-gamebar\shell\open\command /f /ve /d "`"$env:SystemRoot\System32\systray.exe`"" 2>&1 >''

reg add HKCR\ms-gamebarservices /f /ve /d URL:ms-gamebarservices 2>&1 >''
reg add HKCR\ms-gamebarservices /f /v "URL Protocol" /d " " 2>&1 >''
reg add HKCR\ms-gamebarservices /f /v "NoOpenWith" /d " " 2>&1 >''
reg add HKCR\ms-gamebarservices\shell\open\command /f /ve /d "`"$env:SystemRoot\System32\systray.exe`"" 2>&1 >''

Run_As_Admin_Enable_Gamebar.bat
reg add HKCR\ms-gamebar /f /ve /d "URL:ms-gamebar"
reg delete HKCR\ms-gamebar /f /v "NoOpenWith"
reg add HKCR\ms-gamebar /f /v "URL Protocol" /d ""
reg delete HKCR\ms-gamebar\shell /f

reg add HKCR\ms-gamebarservices /f /ve /d "URL:ms-gamebarservices"
reg delete HKCR\ms-gamebarservices /f /v "NoOpenWith"
reg delete HKCR\ms-gamebarservices\shell /f

还有很多系统设置指南可供参考。

1.4 组策略禁用

 gpedit.msc 打开组策略,导航到如下位置: 
计算机配置 → 管理模板 → windows组件 → Windows游戏录制与广播 → 点击 已禁用

2. Xbox Game Bar

按下 Win+G 以使用 Xbox Game Bar,这是内置于 Windows 10 的可自定义游戏覆盖工具。 
Xbox Game Bar 适用于大多数电脑游戏,使您能够即时访问小组件,以便进行屏幕捕获和共享、使用 LFG 查找新团队成员,以及跨 Xbox 主机、移动设备和电脑与 Xbox 好友聊天 – 所有这些操作都不需要退出您的游戏。
Windows-Game-Bar

2.1 xbox地区问题

xbox game pass 在你所在的地区不可用
设置 → 时间和语言 → 区域 → 国家或地区 → 改为香港等... 

修复适用于 Windows 的 Xbox 应用的游戏问题

3. Reg-help

 > reg /?
REG Operation [Parameter List]
  Operation  [ QUERY   | ADD    | DELETE  | COPY    | SAVE    | LOAD   | UNLOAD  | RESTORE | COMPARE | EXPORT | IMPORT  | FLAGS ]
返回代码: (除了 REG COMPARE)
  0 - 成功
  1 - 失败

要得到有关某个操作的帮助,请键入: REG Operation /?
例如:
  REG QUERY /?
  REG ADD /?
  REG DELETE /?
  REG COPY /?
  REG SAVE /?
  REG RESTORE /?
  REG LOAD /?
  REG UNLOAD /?
  REG COMPARE /?
  REG EXPORT /?
  REG IMPORT /?
  REG FLAGS /?

 > reg add /?
REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f] [/reg:32 | /reg:64]

KeyName  [\\Machine\]FullKey
  Machine  远程机器名 - 忽略默认到当前机器。远程机器上只有 HKLM 和 HKU 可用。
  FullKey  ROOTKEY\SubKey
    ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
      HKCR: HKEY_CLASSES_ROOT
      HKCU: HKEY_CURRENT_USER
      HKLM: HKEY_LOCAL_MACHINE
      HKU: HKEY_USERS
      HKCC: HKEY_CURRENT_CONFIG
    SubKey   所选 ROOTKEY 下注册表项的完整名称。

  /v       所选项之下要添加的值名称。
  /ve      为注册表项添加空白值名称(默认)。
  /t       RegKey 数据类型. [ REG_SZ    | REG_MULTI_SZ | REG_EXPAND_SZ | REG_DWORD | REG_QWORD    | REG_BINARY    | REG_NONE ] 如果忽略,则采用 REG_SZ。
  /s       指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符. 如果忽略,则将 "\0" 用作分隔符。
  /d       要分配给添加的注册表 ValueName 的数据。
  /f       不用提示就强行覆盖现有注册表项。
 /reg:32  指定应该使用 32 位注册表视图访问的注册表项。
 /reg:64  指定应该使用 64 位注册表视图访问的注册表项。

例如:
  REG ADD \\ABC\HKLM\Software\MyCo
    添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo

  REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
    添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)

  REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail
    添加一个值(名称: MRU,类型: REG_MULTI_SZ,数据: fax\0mail\0\0)

  REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
    添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
    注意: 在扩充字符串中使用插入符号 ( ^ )

Blender5-WindowUI

导航 (返回顶部) 1. Blender主窗口 1.1 Topbar 1.2 Areas 1.3 Status Bar 2. Workspaces 2.1 Default Workspaces 2.2 Blender 还默认添加了其他几个工作区 2.3 附加工作...