如何完全强制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+:修改快捷方式目标为:
这种方式会让整个会话的错误提示、UI文本全程使用英文,从根源解决部分信息未本地化的问题。pwsh.exe -Culture en-US -UICulture en-US
方法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会话默认使用英文,可修改系统环境变量:
- 打开「系统属性」→「高级」→「环境变量」
- 在系统变量中添加/修改:
LC_ALL=en-US.UTF-8LANG=en-US.UTF-8
- 重启PowerShell后生效
这种方式会影响所有依赖系统文化的程序,包括PowerShell和命令行工具。
补充说明
之前的函数仅修改了PowerShell内部的NativeCultureResolver,但部分错误信息来自底层Windows API,这类信息会读取进程级的文化设置,因此需要同时修改线程文化或系统环境变量才能完全生效。
内容的提问来源于stack exchange,提问作者Jason Hunter
相关产品推荐
相关产品推荐

