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%)
    注意: 在扩充字符串中使用插入符号 ( ^ )

2025-12-04

Microsoft-Store-error

1. Store初始化失败
	1.1 为何要卸载Edge
	1.2 如何卸载Edge
	1.3 为何删除Edge会影响微软商店
2. 微软商店无法联网
	2.1 解除网络隔离的办法有:
3. CheckNetIsolation解除网络隔离
	3.1 查看帮助:
	3.2 获取包名(-n=)
	3.3 获取包sid(-p=)
4. 添加排除域名(不一定有效)
5. 参考链接


1. Store初始化失败

由于卸载了Edge,打开 Microsoft Store,就会报错,[初始化失败]。
下载Edge浏览器,重新安装即可恢复。

1.1 为何要卸载Edge

Edge默认状态,打开就会一直留在进程列表里,这个可以关闭。
Edge浏览器设置 → 系统和性能 → 系统 → [关闭Edge后继续运行在后台扩展和应用]
这样浏览器可以关闭,但进程里还有7,8个类似WebView的进程,源文件都是 [msedgewebview2.exe], 怎么也关不掉。
由于不使用Edge,服务里相关的更新服务也都禁用了。

1.2 如何卸载Edge

Edge属于系统自带的程序,没有提供卸载项。
没找到正常卸载的办法,只能删除目录。
比如启动进入PE模式,整个删除目录: [C:\Program Files (x86)\Microsoft]

也可在正常运行系统时删除的,打开目录 [C:\Program Files (x86)\Microsoft] ,多次手动框选删除文件。 最后剩下个别无法删除的文件,就是系统正在调用打开的文件。
任务管理器里,关闭包含 [msedgewebview2.exe] 的所有进程。
这时候关闭 [msedgewebview2.exe] 后就无法再重新启动了。然后就可以删除掉整个目录了。
世界清净了... 
如果不使用Edge浏览器, 微软商店等系统自带的应用,可以这样删除Edge。

1.3 为何删除Edge会影响微软商店

系统自带的应用大都属于UWP(通用 Windows 平台),UWP的好处是便于开发人员设计统一通用的界面,不用为不同的设备单独开发设计界面。
大概很多UWP都会调用Edge组件来呈现界面,所以Edge没了,很多UWP应用就没法正常打开了。
解决的办法就是前面提到的,下载Edge浏览器, 重新安装即可恢复。

2. 微软商店无法联网

若系统和网络都正常,微软商店在不使用代理时是可以正常联网的。
但开启了系统代理后,Microsoft Store 会连不上网?
... 这又是UWP的问题 ... 
  • UWP 是微软在 Windows 10 中引入的新概念,由于所有 UWP 应用均运行在被称为 App Container 的虚拟沙箱环境中,其安全性及纯净度远胜于传统的 EXE 应用。
  • 但 App Container 机制同时也阻止了网络流量发送到本机(即 loopback),使大部分网络抓包调试工具无法对 UWP 应用进行流量分析。
  • 同样的,该机制也阻止了 UWP 应用访问 localhost,即使你在系统设置中启用了代理,也无法令 UWP 应用访问本地代理服务器,十分恼人。

2.1 解除网络隔离的办法有:

  1. 系统自带的 CheckNetIsolation 命令行工具可以将 UWP 应用添加到网络隔离排除列表。
  2. 第三方工具 Fiddler
  3. 代理软件附带功能或组件, 比如: EnableLoopback.exe
  4. 代理中添加排除域名(状态:时好时坏): *.outlook.com;*.microsoft.com;*office365.com;
Fiddler下载
Fiddler 是一款适用于 Windows、macOS 和 Linux 的 Web 调试代理工具。 它由 Fiddler Classic 发展而来,如今已成为功能更强大、用途更广泛的产品——Fiddler Everywhere。 Fiddler Everywhere 目前是唯一仍在积极开发并提供专属支持的 HTTPS 调试器版本, 它是一款功能强大的工具,可为开发人员和 QA 专业人员提供以下功能:

补充: 另外还有个开源工具,这个10年前的开源项目,没有编译好的可执行程序,只有源码,需要自己搭环境编译... 

3. CheckNetIsolation解除网络隔离

3.1 查看帮助:

 CheckNetIsolation -?
用法: CheckNetIsolation [Module]
模块列表:
 LoopbackExempt    控制 AppContainer 和程序包系列环回免除,以便于应用程序开发。
 Debug    启动 AppContainer 或程序包系列的网络流量故障排除会话。 生成使用的、未使用的或缺少的t 网络功能以及应用程序生成的网络流量的报告。
 -?    显示此帮助消息。

 CheckNetIsolation LoopbackExempt -?
   CheckNetIsolation LoopbackExempt [operation] [-n=] [-p=]
      操作列表:
 -a    将 AppContainer 或包系列添加到环回免除列表。[-n=] [-p=]
 -d    将 AppContainer 或包系列从环回免除列表中删除。[-n=] [-p=]
 -c    清除环回免除 AppContainers 和包系列的列表。
 -s    显示环回免除的 AppContainers 和包系列列表。
 -is    启用 AppContainer 或包系列以接收入站连接。

      参数列表
 -n=   AppContainer 名称或包系列名称。
 -p=   AppContainer 或包系列安全标识符 (SID)。
 -?    显示 LoopbackExempt 模块的此帮助消息。

查看排除列表: 
 CheckNetIsolation LoopbackExempt -s
列出环回免除的 AppContainer
[1] -----------------------------------------------------------------
    名称: microsoft.windowsstore_8wekyb3d8bbwe
    SID:  S-1-15-2-1609473798-1231923017-684268153-4268514328-882773646-2760585773-1760938157
[2] -----------------------------------------------------------------
    名称: Microsoft.AccountsControl_cw5n1h2txyewy
    SID:  S-1-15-2-969871995-3242822759-583047763-1618006129-3578262429-3647035748-2471858633

注:排除列表初始状态为空,以上2个排除项 (store联网和账户登录) 是后添加的。
使用包名称(-n=), 或者包sid(-p=)即可将 指定的 UWP 应用添加到网络隔离排除列表中

3.2 获取包名(-n=)

列出包数量
get-appxpackage | find /c "Name              :"

列出包含发行方的包名称
get-appxpackage | find  "PackageFamilyName :"

列出名称中包含“store”的所有应用。 
 get-appxpackage |select-string -pattern "store"
Microsoft.StorePurchaseApp_22408.1400.1.0_x64__8wekyb3d8bbwe
Microsoft.WindowsStore_22510.1401.2.0_x64__8wekyb3d8bbwe
Microsoft.Services.Store.Engagement_10.0.23012.0_x64__8wekyb3d8bbwe
Microsoft.Services.Store.Engagement_10.0.23012.0_x86__8wekyb3d8bbwe

查看包信息
 get-appxpackage Microsoft.WindowsStore
Name              : Microsoft.WindowsStore
PackageFullName   : Microsoft.WindowsStore_22510.1401.2.0_x64__8wekyb3d8bbwe
PackageFamilyName : Microsoft.WindowsStore_8wekyb3d8bbwe

添加排除项目
 CheckNetIsolation LoopbackExempt -a  -n="Microsoft.WindowsStore_8wekyb3d8bbwe"

删除排除项目
 CheckNetIsolation LoopbackExempt -d  -n="Microsoft.WindowsStore_8wekyb3d8bbwe"

3.3 获取包sid(-p=)

注册表这里可以看到所有SID,就是 -p= 的值
计算机\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings
定位到 [Mappings\] 后,Ctrl + F,通过关键字查找。 比如找“WindowsStore”
S-1-15-2-1609473798-1231923017-684268153-4268514328-882773646-2760585773-1760938157

添加排除项目
 CheckNetIsolation LoopbackExempt -a  -p=S-1-15-2-1609473798-1231923017-684268153-4268514328-882773646-2760585773-1760938157

查看排除列表: 
 CheckNetIsolation LoopbackExempt -s
列出环回免除的 AppContainer
[1] -----------------------------------------------------------------
    名称: microsoft.windowsstore_8wekyb3d8bbwe
    SID:  S-1-15-2-1609473798-1231923017-684268153-4268514328-882773646-2760585773-1760938157
[2] -----------------------------------------------------------------
    名称: Microsoft.AccountsControl_cw5n1h2txyewy
    SID:  S-1-15-2-969871995-3242822759-583047763-1618006129-3578262429-3647035748-2471858633

添加好这2个必要项,微软商店即可正常联网并登录账号。

4. 添加排除域名(不一定有效)

代理中添加排除域名: *.outlook.com;*.microsoft.com;*office365.com;
更新: 这个方法有时有效。有时无效,无效时并不会显示连不上网的提示,而是什么都不显示... 

清除环回免除 AppContainers 和包系列的列表。
 CheckNetIsolation LoopbackExempt -c
确认列表为空
 CheckNetIsolation LoopbackExempt -s

代理服务器设置,手动设置代理,编辑
默认通常为: 
Localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*
在其后添加微软相关域名地址:
;*.outlook.com;*.microsoft.com;*office365.com

这种方法对其他UWP应用也应该有效,只要找到正确的链接域名。

5. 参考链接


UWP
UWP 是 通用 Windows 平台,UWP 已不再处于积极开发状态。
UWP 旨在让开发者为不同 Windows 设备 (PC、平板电脑、手机、Xbox) 等开发一个应用版本。 UWP 通过 Microsoft Store 分发,并允许应用程序在各种 Windows 设备上自动调整以适应不同的硬件和屏幕。 
请注意,仍支持 UWP,但开发 Windows 应用的首选方法是使用 WinUI 和 Windows 应用 SDK。 另一个选项是 WPF。 

开发 Windows 桌面应用

WinUI 的设置和工具

Windows 应用 SDK

教程:使用 .NET 创建新的 WPF 应用

2025-11-22

Chrome-Gemini-Nano

1. Chrome-Weights.bin
	1.1 停用删除
	1.2 转移目录
2. 尝试失败记录2025
	2.1 在 Chrome 中启用 AI
	2.2 Next.js Chrome AI 聊天机器人
	2.3 Chrome插件
3. 相关帮助
	3.1 内置 AI 帮助
	3.2 Chrome AI 功能故障排除
4. 更多相关主题
	4.1 templates模板
	4.2 demo演示
	4.3 Gemini-api

 Chrome-Gemini-Nano

1. Chrome-Weights.bin

OptGuideOnDeviceModel文件夹: C:\Users\Tom\AppData\Local\Google\Chrome\User Data\OptGuideOnDeviceModel\2025.8.21.1028 
OptGuideOnDeviceModel 文件夹(通常包含一个很大的weights.bin 文件)
  • 是Chrome 浏览器内置的Gemini Nano AI 模型, 名为Gemini Nano,用于支持“Prompt API”等实验性功能。 
  • 它包含Chrome的优化指南功能使用的设备端机器学习模型的已学习参数(权重)。 
  • 该模型帮助Chrome做出本地决策,以优化你的浏览体验(例如,提高页面加载时间,管理资源),而无需将可能敏感的浏览数据发送到服务器进行分析以用于此特定功能。 

1.1 停用删除

若不需要,可以参照下一节,停用相关组件即可。避免这个超大文件占用空间。

1.2 转移目录

Chrome用户数据默认位置如下: 
C:\Users\Tom\AppData\Local\Google\Chrome\User Data
  1. 将 [User Data] 复制到其他分区。比如 F:\ChromeData
  2. 删除C:\Users\Tom\AppData\Local\Google\Chrome\下的目录 [User Data]。
  3. 创建链接
    •   mklink /J "C:\Users\Tom\AppData\Local\Google\Chrome\User Data" "F:\ChromeData"
    • 为 C:\Users\Tom\AppData\Local\Google\Chrome\User Data <<===>> F:\ChromeData 创建的联接
这样,Chrome的用户数据都在F盘,不再占用C盘空间。

2. 尝试失败记录2025

2.1 在 Chrome 中启用 AI

浏览器安装完成后,请确保设置以下标志:
  • chrome://flags/#prompt-api-for-gemini-nano
    • 选择“已启用”
  • chrome://flags/#optimization-guide-on-device-model
    • 选择“启用绕过首选项要求”
  • chrome://flags/#summarization-api-for-gemini-nano
    • 选择“已启用”
  • chrome://components/
    • 点击设备型号优化指南 [Optimization Guide On Device Model] 中的“检查更新”按钮下载该型号的优化指南。 如果您看不到优化指南,请确保您已正确设置上述参数,然后重新启动浏览器并刷新页面。
    • Optimization Guide On Device Model - 版本: 2025.8.21.1028 
  • chrome://settings/help
    • Google Chrome 已是最新版本
    • 版本 142.0.7444.176(正式版本) (64 位) 
  • chrome://on-device-internals/
    • Tools \ 
      • Device performance class: Very Low 
    • Model Status \ 
      • Foundational model state: Ready
      • Model Name: v3Nano
      • Version: 2025.08.14.1358
      • Backend Type: CPU
      • File path: C:\Users\Tom\AppData\Local\Google\Chrome\User Data\OptGuideOnDeviceModel\2025.8.21.1028
      • Folder size: 2,730.3 MiB
    • 模型状态下可以看到模型已经Ready。
完成以上任然收到错误提示:
您的浏览器不受支持。
请将Chrome浏览器更新至127版本或更高版本。 注: 这里的Chrome大概需要开发版。

模型相关源码

2.2 Next.js Chrome AI 聊天机器人

这个聊天机器人演示(来源)使用 Next.js 和Vercel AI SDK,并通过chrome-ai提供程序调用 Chrome 的内置 AI模型(Gemini Nano)。
Gemini Nano的Prompt API在浏览器的window.ai函数中公开。它可以通过Vercel AI SDK的统一API轻松调用。

工作原理
以下代码包含了使用 Chrome AI 和 Vercel AI SDK 进行文本流传输所需的全部内容。
import { streamText } from "ai";
import { chromeai } from "chrome-ai";

const { textStream } = await streamText({
  model: chromeai(),
  prompt: "what is a large language model?",
}); 
chromeai实现了一个底层使用window.ai的Provider 。 

支持的浏览器
请确保您使用的是 Chrome(开发者 / Canary)版本 127 或更高版本。 

必要的实验性标志
浏览器安装完成后,请确保设置以下标志:
chrome://flags
启用相关模块与上一节一致

chrome://components
点击“设备型号优化指南”中的“检查更新”按钮下载该型号。 如果您看不到优化指南,请确保您已正确设置上述参数。 如果仍然看不到优化指南,请在浏览器控制台中运行“await window.ai.assistant.create();”,然后刷新页面。

浏览器控制台(console)
更多工具 → 开发者工具 → 控制台(console)页签
快捷键: F12 或 (Ctrl + Shift + I) → 开发者工具 → 控制台(console)页签

2.3 Chrome插件

Chrome 应用商店 
搜索:Gemini nano ai

Chrome AI - Chrome 内置离线 AI 对话/翻译

概述
在侧边栏(Side panel)里打开 Chrome 内置 Gemini Nano AI,可以离线使用 AI 对话和翻译功能。
使用 Chrome 内置的 Gemini Nano AI 与 AI 进行对话和翻译,支持离线使用。

使用此扩展程序依赖于 Chrome 内置的 Gemini Nano AI,因此 Chrome 版本必须不低于 v138,最新版本已包含此版本。
  1. Download and install Chrome with built-in AI Latest Version.
  2. Go to chrome://flags/#prompt-api-for-gemini-nano and enable the Prompt API for Gemini Nano option.
  3. Go to chrome://flags/#optimization-guide-on-device-model and turn on the Enables optimization guide on device option.
  4. Go to chrome://components/ and check or download the latest version of Optimization Guide On Device Model.

Chrome 内置离线AI 对话/翻译
安装后测试,如下错误提示:
This extension uses Chrome's built-in Translation API and Gemini Nano AI, which requires Chrome version be no lower than v138, which you can get in the Latest Version.

Translation Feature Setup:
  1. Download and install Chrome with built-in AI Latest Version.
  2. Go to (chrome://…) and enable
    1. chrome://flags/#enable-experimental-web-platform-features
    2. chrome://flags/#translation-api
    3. chrome://flags/#language-detection-api
  3. Restart Chrome browser to apply changes.
Chat Feature Setup:
  • Go to (chrome://…) and enable
    • chrome://flags/#prompt-api-for-gemini-nano
    • chrome://flags/#optimization-guide-on-device-model
  • Go to (chrome://…) and check or download the latest version of [Optimization Guide On Device Model].
    • chrome://components/
以上几种工具及插件需要设置的部分基本一致。

3. 相关帮助

3.1 内置 AI 帮助

硬件
  • GPU 或 CPU:内置模型可以使用 GPU 或 CPU 运行。
  • GPU:VRAM 严格大于 4 GB。
  • CPU:16 GB 或更多 RAM,以及 4 个或更多 CPU 核心。
  • 网络:无限流量或不按流量计费的网络连接。
  • 存储空间:包含 Chrome 个人资料的卷上至少有 22 GB 的可用空间。 
随着浏览器更新模型,Gemini Nano 的确切大小可能会有所不同。 如需确定当前大小,请访问:  
  • chrome://on-device-internals/
    • Foundational model state: Ready
    • Model Name: v3Nano
    • Version: 2025.08.14.1358
    • Backend Type: CPU
    • File path: C:\Users\Tom\AppData\Local\Google\Chrome\User Data\OptGuideOnDeviceModel\2025.8.21.1028
    • Folder size: 2,730.3 MiB

3.2 Chrome AI 功能故障排除

4. 更多相关主题

4.1 templates模板

AI应用模板和示例

4.2 demo演示

网络人工智能示例 
Web AI 是一个 TypeScript 库,它允许您直接在 Web 浏览器中运行现代深度学习模型。
您可以轻松地将 AI 功能添加到 Web 应用程序中,而无需复杂的服务器端基础架构。 

特征 Features
  • 便于使用: 用一行代码创建一个模型,用另一行代码获取结果。
  • ONNX 运行时提供支持: Web AI 使用 ONNX Web 运行时环境运行模型,该环境对各种运算符都有丰富的支持。这意味着任何模型都能正常工作。
  • 兼容Hugging Face: Web AI 使用与中心相同的格式的模型配置文件,这使得集成现有模型变得更加容易。
  • 内置缓存: Web AI 使用 localforage 将下载的模型存储在 IndexedDB 中。您可以动态配置缓存大小。
  • Web Worker 支持: 所有繁重的操作 – 模型创建和推理 – 都被卸载到单独的线程中,这样用户界面就不会冻结。

4.3 Gemini-api


Windows-Execution-Policies

导航 (返回顶部) 1. about_Execution_Policies 1.1 POWERSHELL 执行策略 1.2 执行策略作用域 2. 使用 PowerShell 管理执行策略 2.1 查看当前的有效执行策略 2.2 更改执行策略 2.3 删除执行策略 ...