windows 'net user' 命令可用的有效国家代码是什么?

问题描述

我有一个使用“net user”创建用户的 Windows 脚本。即使在日本操作系统上运行,我也需要确保此用户是使用美国英语国家代码创建的。文档 here 建议为此需要一个 3 位代码,但我无处可找到有效代码的示例或列表。我试过 840、409 和 1033 - 都给出错误“提供了非法的国家/地区代码”。有什么想法吗?

net user testUser testPwd123 /add /countrycode:840

解决方法

国家代码的验证实际上是通过NET USER命令实现的。底层 NetUserSetInfo API 将允许您设置您喜欢的任何国家/地区代码。如果您将国家/地区代码设置为 NET USER 无法识别的数字,则会将国家/地区显示为 (null)

NetUserSetInfo API 具有单独的国家/地区代码和代码页字段。您可以使用 USER_INFO_1024 设置国家/地区代码,使用 USER_INFO_1025 设置代码页。但是,NET USER 命令似乎只知道国家/地区代码,无法设置或显示代码页。此外,如果我创建一个新用户并通过 SSH 连接到该用户,则该用户的代码页设置似乎与 CHCP 命令显示的代码页没有区别。

NET USER 国家/地区代码实际上源自 MS-DOS 和 OS/2。它们基于经过一些修改的国际拨号代码子集。它们最终可以追溯到 MS-DOS COUNTRY=

中的 CONFIG.SYS 语句

我怀疑 Windows 目前对这些代码做了什么。我认为它们实际上是早期版本的 Windows 中包含的 MS-DOS 和 OS/2 客户端支持的遗留物。 NET 命令是 Windows 的一部分,它在历史上源自 IBM/Microsoft LAN Manager for MS-DOS 和 OS/2。受支持的国家/地区代码列表如此严格这一事实表明这是一个废弃的历史遗迹——如果此设置实际上被用于任何其他用途,则需要添加更广泛的受支持值。

以下是支持的值(在 Windows 10 2004 版中,但我希望更旧版本的 Windows 会产生相同的结果):

国家代码 国家
000 系统默认
001 美国
002 加拿大(法语)
003 拉丁美洲
031 荷兰
032 比利时
033 法国
034 西班牙
039 意大利
041 瑞士
044 英国
045 丹麦
046 瑞典
047 挪威
049 德国
061 澳大利亚
081 日本
082 韩国
086 中国(中国)
088 台湾
099 亚洲
351 葡萄牙
358 芬兰
785 阿拉伯语
972 希伯来语

这是我用来生成上述列表的 Windows 批处理文件:

@echo off
setlocal enableextensions enabledelayedexpansion
rem Make sure we are using Windows commands not Cygwin/etc if you happen to have Cygwin first in PATH
PATH %systemroot%\system32
NET USER DELETEME myCmplxPwd1! /ADD 1>NUL: 2>NUL:
echo. >NETUSER.TMP
FOR /L %%i IN (0,1,999) DO (
        NET USER DELETEME /COUNTRYCODE:%%i 1>NUL: 2>NUL:
        NET USER DELETEME | findstr Country >> NETUSER.TMP
)
net user deleteme /delete 1>NUL: 2>NUL:
type netuser.tmp | sort /unique
del netuser.tmp

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...