You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何完全强制PowerShell输出英文?现有函数仅部分生效

强制本地化系统上的PowerShell输出全为英文的方法

我曾尝试过一个修改PowerShell UI文化的函数来强制输出英文,但仅部分生效。该函数如下:

function Set-PowerShellUICulture {
    param([Parameter(Mandatory=$true)]
          [string]$Name)

    process {
        $culture = [System.Globalization.CultureInfo]::CreateSpecificCulture($Name)

        $assembly = [System.Reflection.Assembly]::Load("System.Management.Automation")
        $type = $assembly.GetType("Microsoft.PowerShell.NativeCultureResolver")
        $field = $type.GetField("m_uiCulture", [Reflection.BindingFlags]::NonPublic -bor [Reflection.BindingFlags]::Static)
        $field.SetValue($null, $culture)
    }
}

执行该函数后,运行get-acl *命令时,仍有挪威语信息输出(如Ingen tilgang,对应英文“Access Denied”),具体输出如下:

get-acl *                                                                                                     
get-acl : Ingen tilgang
At line:1 char:1
+ get-acl *
+ ~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-Acl], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetAclCommand

请问还有其他方法可以强制PowerShell所有输出都为英文吗?


解决方法

方法1:启动PowerShell时指定文化参数

直接在启动时通过参数锁定英文环境,覆盖系统本地化设置:

  • PowerShell 5.1及以下:修改快捷方式目标为:
    powershell.exe -Culture en-US -UICulture en-US
    
  • PowerShell 7+:修改快捷方式目标为:
    pwsh.exe -Culture en-US -UICulture en-US
    
    这种方式会让整个会话的错误提示、UI文本全程使用英文,从根源解决部分信息未本地化的问题。

方法2:修改当前会话的线程文化

在已打开的PowerShell会话中,运行以下命令修改进程级文化设置:

# 修改线程文化
[System.Threading.Thread]::CurrentThread.CurrentCulture = [System.Globalization.CultureInfo]::CreateSpecificCulture("en-US")
[System.Threading.Thread]::CurrentThread.CurrentUICulture = [System.Globalization.CultureInfo]::CreateSpecificCulture("en-US")
# 同步PowerShell内置文化变量
$PSCulture = "en-US"
$PSUICulture = "en-US"

该方法会覆盖当前会话的所有文化依赖,包括底层Windows API返回的错误信息。

方法3:修改系统环境变量(永久生效)

如果需要所有PowerShell会话默认使用英文,可修改系统环境变量:

  1. 打开「系统属性」→「高级」→「环境变量」
  2. 在系统变量中添加/修改:
    • LC_ALL = en-US.UTF-8
    • LANG = en-US.UTF-8
  3. 重启PowerShell后生效
    这种方式会影响所有依赖系统文化的程序,包括PowerShell和命令行工具。

补充说明

之前的函数仅修改了PowerShell内部的NativeCultureResolver,但部分错误信息来自底层Windows API,这类信息会读取进程级的文化设置,因此需要同时修改线程文化或系统环境变量才能完全生效。


内容的提问来源于stack exchange,提问作者Jason Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:05:27