导入用户、创建sha256密码用户.note
·因为要获取邮件前半部分名称:
# 使用for循环嵌套for循环:
FOR /F "tokens=1-20 delims=," %a in (c:\SEC.csv) do FOR /F "tokens=1-20 delims=@" %g in ("%c") do echo %g %e%c 需要双引号
%g以后的变量,是第二个for循环的变量,%e的变量,是第一个for循环的变量
1、导入用户:
替换国家时,记得点击最上方,只替换国家那一列,否则也会替换到其他内容
# 先改国家代码:
Germany - DE
Brazil - BR
Japan - JP
Canada - CA
Australia - AU
India - IN
France - FR
Singapore - SG# sec(包含上面的):
Itary - IT1)WSC2026.MASTER 域用户:
注意不要删除文件开头的 password 和 surname 等标题
·合并脚本:
# 直接 excel 合并:
=VLOOKUP(K2, [PW.csv]PW!$A:$B, 2, 0)
输入: =VLOOKUP(K2, 然后点击另一个excel的列首:A,然后改成 $A:$B, 然后输入 2,0)即可powershell:
# powershell脚本需要开放执行权限:
Set-ExecutionPolicy -ExecutionPolicy bypass# 简化:
$pw = Import-Csv D:\MASTER_USER_PW.csv | Group-Object phone -AsHashTable -AsString
Import-Csv D:\MASTER_USER.csv | Select-Object *, @{n='password';e={$pw[$_.phone].password}} | Export-Csv D:\MASTER_USER_out.csv
$pw = @{}
import-csv D:\MASTER_USER_PW.csv | % { $pw[$_.phone] = $_.password }
import-csv D:\MASTER_USER.csv | % { $_ | Add-Member -NotePropertyName password -NotePropertyValue $pw[$_.phone] -PassThru } | export-csv D:\out.csv -NoTypeInformation -Encoding UTF8
旧:
# 因为是两个文件,要合并文件:
apt install -y python3 python3-pandas
# 内容:
import pandas as pd
users = pd.read_csv("users.txt", sep=";", dtype=str)
pw = pd.read_csv("pw.txt", sep=";", dtype=str)
result = users.merge(pw, on="phone", how="left")
result.to_csv("out.txt", sep=";", index=False)

wsc2026.master域要加一行用户登录名(将 email截取出来,然后删掉邮件后缀)
# 导入用户:
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do @echo %b.%a
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd ou ou="%j",dc=wsc2026,dc=master
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd group cn="%i",ou="%j",dc=wsc2026,dc=master
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd user cn="%b.%a",ou="%j",dc=wsc2026,dc=master -pwd %l -fn %b -ln %a -email "%c" -dept "%d" -title "%e" -memberof cn="%i",ou="%j",dc=wsc2026,dc=master -tel "%k"
# 新:FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd user cn="%l",ou="%j",dc=wsc2026,dc=master -pwd %m -fn %b -ln %a -email "%c" -dept "%d" -title "%e" -memberof cn="%i",ou="%j",dc=wsc2026,dc=master -tel "%k"
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do powershell set-aduser %b.%a -StreetAddress '%f' -Country '%g' -State '%h'
# 新:FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do powershell set-aduser %l -StreetAddress '"%f"' -Country '%g' -State '%h'2)wsc2028.sec 域用户:
wsc2028.sec域要加一行用户登录名(将 email截取出来,然后删掉邮件后缀)
# wsc2028.sec:
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd ou ou=%j,dc=wsc2028,dc=sec
# 注意:不同OU之间有多个相同组,需要单独指定 samid,否则无法创建:
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd group cn="%j",ou="%k",dc=wsc2028,dc=sec -samid "%j_%k" //这里samid由组名+OU名生成
# 旧:
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd group cn="%j",ou=%k,dc=wsc2028,dc=sec
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do dsadd user cn=%c,ou=%k,dc=wsc2028,dc=sec -pwd Skills39 -memberof cn="%j",ou=%k,dc=wsc2028,dc=sec -fn %b -ln %a -email %d -dept "%e" -title "%f" -tel "%l"
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do powershell set-aduser 'cn=%c,ou=%k,dc=wsc2028,dc=sec' -StreetAddress '"%g"' -Country '%h' -State '%i'wsc2028.sec 创建的用户有的是禁用状态,直接拒绝就好
·wsc2028.sec域的用户samid过长,会导致用户没有加组,需要手动加组:
FOR /F "tokens=1-20 delims=;" %a in (c:\users.txt) do powershell Add-ADGroupMember '%j' -members 'cn=%c,ou=%k,dc=wsc2028,dc=sec'2、创建 sha256密码的用户:
配置这个前必须先更改密码策略,允许用户密码不匹配密码复杂度
这个需要在图形化上修改组策略,然后导出给这台机器导入
设置密码策略:
1)先在一台图形化机器(没加域的机器):
建议是在 那台ansible上
修改好组策略后导出:

然后拷贝到 server core

2)在server core上使用命令导入:
# sdb这个文件必须要不存在,它会自动创建
secedit /import /db c:\hisecws.sdb /cfg c:\1.inf /overwrite
secedit /configure /db c:\hisecws.sdb /cfg c:\1.inf /areas SECURITYPOLICY
gpupdate /force

模板:
直接输入 secedit /import 就能看(不要加 /?)


3)创建用户:
不能用 echo,echo会有换行符,要用 out-file c:\... -nonewline
#
1..10 | ForEach-Object {
$user = 'Admin{0:D3}' -f $_
$bytes = [Text.Encoding]::UTF8.GetBytes($user + 'Skills39')
$hash = [Security.Cryptography.SHA256]::Create().ComputeHash($bytes)
$pass = ([BitConverter]::ToString($hash)).Replace('-','').ToLower().Substring(0,10)
"$user $pass"
}for /l %a in (1,1,9) do echo Admin00%aSkills39 > c:\user.txt && certutil.exe -hashfile c:\user.txt SHA256 >> c:\hash.txt
echo Admin010Skills39 > c:\user.txt
certutil.exe -hashfile c:\user.txt SHA256 >> c:\hash.txt然后用Ctrl + H 替换掉说明,只保留hash密码,然后手动删除空行(有空行会报错)
最终就这样:

# 然后编辑脚本创建:
$1 = 0
get-content c:\hash.txt | foreach-object {
$i++
$pass=$_.substring(0,9)
echo $pass
net user Admin00$i $pass /add
}
## 或一条命令:
$i = 0
Get-Content c:\hash.txt | ForEach-Object { $i++ ; $pass= $_.substring(0,10); echo $pass ; net user Admin00$i $pass /add }
net user Admin0010 /delete //这个用户删不删都无所谓注意,最后一个用户会变成 Admin0010,需要手动删除它,然后手动创建一个 Admin010
脚本里加 echo 方便在创建最后一个用户的时候直接复制密码,而不需要再查看

# 然后手动创建 Admin010:
net user Admin0010 /delete
net user Admin010 b415135676 /add