B模块
·注意事项
1、预共享密钥的s2s连接地址不能用域名,只能用IP地址
2、每个客户配置:Set-ExecutionPolicy Bypass防止评分时使用脚本评分,客户端无法执行 / 题目要求运行脚本,结果无法执行
3、台Windows配置:new-netfirewallrule -dis pass -name pass放行所有规则,等同于直接关闭防火墙,但是防火墙实际上是开着的
4、配置 S2S VPN时,建议在接口加上 -persistent 参数,这样它断开也会自动重连(除非RemoteAccess服务没有启动)
5、DNS 反向解析,必须要对所有A记录创建反解,如果服务域名是用A记录写的,也必须要写PTR
6、客户端重新注册ddns的命令:ipconfig /registerdns
7、在检查环境时,可以先查看机器 时区、keymap,是否有预配置 IP、服务
8、安装 AD域后,将dns服务器地址设置为本地IP,如果没有IPv6地址,就取消IPv6网卡的监听,如果有,就把IPv6 DNS服务器地址也设置为本地
9、Server 2025中,配置failover服务时,如果要连接 iSCSI等磁盘,必须要先将failover集群创建出来后,再连接磁盘,否则创建failover集群时会在创建时一直卡住
10、如果子域、RODC域的DHCP无法授权,需要在 林根域DC上用命令授权:Add-DhcpServerInDC -DnsName "lyon-router.lyon.paris.local" -IPAddress 10.40.0.1
11、有时iscsi配置后端口不会起来,需要手动重启一下服务(重启机器也不行)

12、有时候使用iSCSI作为后端的failover,没有自动创建出存储池,可以不创建存储池,在failover上之际将这块磁盘添加进去,然后开启维护模式,在服务器管理器中格式化该磁盘(Win + K有时无法格式化)
13、一些需要计划任务运行bat脚本的,例如DHCP重启自动恢复,凭据可以指定SYSTEM(勾选使用最高权限),否则每次它执行都会弹出一个cmd框,这样不太好,使用SYSTEM用户就不会有弹窗
14、Server 2025中,adrms 增加了一个必要条件:1、必须能够验证证书吊销
15、如果有两个域、或者子域,建议将各自对端域的Domain Admins 加入机器本地的 administrators中:net localgroup Administrators “CN2026.wsc\Domain Admins” /add
16、Windows 域内机器会自动注册dns记录,但是假如这个机器有多个IP,例如网关,那么它就只会注册靠近网关的IP的那条记录,其他的记录需要手动添加
17、RSAT 连接时,如果是同一个域的,最好用域名来连接,用IP有时候无法连接,例如 DNS
18、可以使用 netsh interface ip set address tun0(定义的S2S接口名称) 来指定VPN接口地址
19、DFS 根目录和创建的DFS文件夹中的共享文件夹的根目录不能一样,否则会出问题,会导致路径重叠,DFS共享文件夹创建失败
20、在客户端创建证书申请,提交给CA签发的证书,有时会因为一些问题导致浏览器无法调用,这个时候可以在certlm.msc中将它导出为pfx,然后再重新导入就能使用了。
21、关于 DNS 转发器,要看题目说的是转发到一个域,还是转发到一个机器,如果是转发到一个域,那就要做条件转发,如果是指向某个dns机器,那就是普通转发器
22、web index文件不要用 echo 来写入内容,要用 set-content,否则就会像下面这样多两个字符
(Ansible的win_lineinfile 不会导致这样多出字符)

23、Windows Web HTTP重定向到HTTPS要使用 HTTP Redirect,不要用 HSTS,因为HSTS返回值是200,HTTP重定向返回值才是301(新建一个http站点来做这个)
并且这里最好这样写,末尾加 / ,下面两个都不要勾选,这样重定向时就会携带 URI
并且记得这里一定要改成 301,默认是 302

24、子域配置 DFS,创建DFS复制组时是一定会出问题的,因为父域会把子域的那台机器用父域的域名去访问,而不是用子域的,需要在DFS服务器上添加一个子域的 suffix:
Set-DnsClientGlobalSetting -SuffixSearchList @("shanghai.cn","beijing.shanghai.cn")
25、就算题目没有要求修改密码策略,也必须要更改密码策略,将密码最小更改期限改为 0(默认为1,这就导致只能修改一次密码,之后必须等待一天)
26、公网 DNS 如果有要求 NS的FQDN的话,需要先设置域名后缀,然后创建一个 . 根域,主机的FQDN就会自动创建了。
27、如果有两个域,共享文件夹记得给对端域的用户访问权限,共享文件夹权限不要用 Domain Users,要用 users(因为Users中有Authenticated Users,能够包含对端域用户)
28、添加一些用户权限时,建议使用 Administrators、Users 这些。Administrators同时包含本地管理员、域管理员;Users同时包含本地用户,Authenticated Users,Authenticated Users又同时包含域用户,对端做了域信任的域用户。
29、配置完组策略后,大部分都需要gpupdate 一下策略,然后logoff才会生效
一、Powershell/cmd 命令:
1、初始化:
new-netfirewallrule -dis pass -name pass
Set-LocalUser administrator -PasswordNeverExpires $true
net user administrator /active:yes
powercfg /change monitor-timeout-ac 0
powercfg /change standby-timeout-ac 0
netdom renamecomputer (hostname) /newname:
net user administrator Skill39@Shanghai
Set-LocalUser user -PasswordNeverExpires $true
2、CLI 设置 suffix:

3、设置 IP、DNS:
# IPv4:
netsh interface ip set address Ethernet0 static 192.168.10.1
netsh interface ipv4 set dnsservers Ethernet0 static 192.168.10.1 primary validate=no
# IPv6:
netsh interface ipv6 add address Ethernet0 2001:db8:10::1/64
netsh interface ipv6 add route ::/0 Ethernet0 2001:db8:10::fffe
netsh interface ipv6 set dnsservers Ethernet0 static 2001:db8:10::1 validate=no
## 删除地址、dns:
# IPv4:
netsh interface ip set address Ethernet0 dhcp
netsh interface ipv4 delete dnsservers Ethernet0 all
# IPv6:
netsh interface ipv6 delete address Ethernet0 2001:db8:10::1
netsh interface ipv6 delete route ::/0 Ethernet0 2001:db8:10::fffe
netsh interface ipv6 delete dnsservers Ethernet0 all
·关闭 IPv6 临时地址(只会在客户端开启,服务端不会开启):
Set-NetIpv6Protocol -UseTemporaryAddresses Disabled
4、安装软件包:
Install-WindowsFeature routing -IncludeManagementTools -Restart
5、共享文件夹:
共享权限 不对 SYSTEM、Administrators 做限制,这里只做白名单,其他应该在 NTFS 中去限制
# 创建共享:
net share Groups=D:\DFS\Groups /grant:everyone,full
# 定义多个组:
net share Groups=D:\DFS\Groups /grant:Users,full /grant:Sales,full
# 删除共享:
net share test \\HQS1 /delete
# 对共享文件夹设置拒绝权限:
Block-SmbShareAccess -Name "MKT" -AccountName "PARIS\User1" -Force
# 对文件夹下的所有子文件、子文件夹 关闭继承(并保留权限):
icacls c:\share\personal\ /inheritance:d /T /C
## /inheritance:r 就是禁用继承的同时删除继承来的权限(但是一般都是全删)
# 对文件夹下的所有子文件、子文件夹 开启继承:
icacls c:\share\personal\ /inheritance:e /T /C
可以这样查看参数:

6、findstr -i 参数,忽略大小写搜索
7、一键安装所有 RSAT 工具:
Get-WindowsCapability -Online -name RSAT* | % {Add-WindowsCapability -Online -Name $_.Name -Source D:\LanguagesAndOptionalFeatures\ -LimitAccess}
# Tab简化:get-windowsca -on -na RSAT* | % {add-windowsca -on -n $_.name d:\l -li}
8、DNS:
1)添加/删除 DNS区域:
# 添加一个普通主区域:
Add-DnsServerPrimaryZone -Name test1.com -zonefile test1.com.dns
# 添加辅助区域:
Add-DnsServerSecondaryZone -Name test1.com -ZoneFile test1.com.dns -MasterServers 192.168.10.1
# 添加普通反向区域:
## 注意不能写全192.168.10.0,不能这样写,必须写:192.168.10/24,最后一位IP 要省略
Add-DnsServerPrimaryZone -NetworkID 192.168.10/24 -ZoneFile 192.168.10.dns
# 添加AD集成主区域:
Add-DnsServerPrimaryZone -Name test1.com -ReplicationScope Domain //这里也可以写'Enterprise'
# 添加一个普通主区域:
Add-DnsServerPrimaryZone -NetworkID 192.168.10 -ZoneFile "10.168.192.in-addr.arpa.dns"
# 添加AD集成反向区域:
Add-DnsServerPrimaryZone -NetworkID "192.168.10.0/24" -ReplicationScope "Domain"
# 删除 dns区域/AD集成区域:
Remove-DnsServerZone -Name test1.com -Force
2)添加 记录:
# A记录:
Add-DnsServerResourceRecordA -ZoneName "wsc2026.org" -Name "www" -IPv4Address "192.168.10.10"
# CNAME记录:
Add-DnsServerResourceRecordCName -ZoneName "wsc2026.org" -Name "ftp" -HostNameAlias "www.wsc2026.org."
# PTR 记录:
## 先用 get-dnsserverzone查看PTR区域,然后将其复制:

添加记录:
Add-DnsServerResourceRecordPtr -ZoneName 249.96.113.in-addr.arpa -PtrDomainName pubsrv01.green.com -Name 225
## -PtrDomainName参数指定域名
## -Name指定地址(注意要反着写,如果PTR区域是/16,并且要写的地址是192.168.10.1,那么这里-Name就要写 1.10 )
# 删除记录:
Remove-DNSServerResourceRecord -Name external -ZoneName paris.com -RRType A //在paris.com区域中删除名为external的A记录
或者:
Remove-DNSServerResourceRecordA -Name external -ZoneName paris.com
3)指定 根提示、转发器、条件转发器、委派:
## 指定根提示:
Add-DnsServerRootHint -NameServer ns.worldskills.org -IPAddress 86.20.1.1
## 指定转发器:
Set-DnsServerForwarder -IPAddress 10.20.20.20
### 转发失败后,不允许使用根提示(不指定默认就是true):
Set-DnsServerForwarder -IPAddress 10.20.20.20 -UseRootHint $false
## 指定条件转发器:
Add-DnsServerConditionalForwarderZone -Name "beijing.cn" -MasterServers 10.20.20.20
## 指定委派(这种方式不能用于 根区域:. ):
### 首先得先有 shanghai.cn 区域:
Add-DnsServerPrimaryZone -zoneName gz.shanghai.cn -ZoneFile gz.shanghai.cn.dns
Add-DnsServerZoneDelegation -Name "shanghai.cn" -ChildZoneName "gz" -NameServer "dns1.gz.shanghai.cn" -IPAddress 10.30.30.10
## 指定委派(在根 . 区域下,并且其他区域也适用)
add-dnsserverprimaryzone -zonename . -zonefile root.dns
Add-DnsServerResourceRecord -ZoneName . -Name green.com -NS -NameServer pubsrv01.green.com.
Add-DnsServerResourceRecordA -ZoneName . -Name pubsrv01.green.com -IPv4Address 113.96.249.225
### 例如,在根区域上为 shanghai.cn配置委派:
Add-DnsServerPrimaryZone -ZoneName . -ZoneFile root.dns
Add-DnsServerZoneDelegation -Name . -ChildZoneName shanghai.cn -NameServer ns.shanghai.cn -IpAddress 86.20.3.254
## 删除:
## 删除委派:
Remove-DnsServerZoneDelegation -Name "." -ChildZoneName "shanghai.cn" -Force
## 删除转发器:
Remove-DnsServerForwarder -IPAddress 10.20.20.20 -Force
## 删除条件转发区域:
就是正常删除区域的命令
Remove-DnsServerZone -Name "beijing.cn" -Force
## 删除根提示:
Remove-DnsServerRootHint -NameServer "root.skills.cn" -IPAddress 10.0.0.10 -Force
4)域内客户端自动注册 dns 记录:
# 如果有多个IP,例如网关,只会注册一个地址
ipconfig /registerdns
·清除DNS缓存:
Clear-DnsServerCache -Force
9、DHCP:
授权 DHCP 服务器:
Add-DhcpServerindc -DnsName “dc.shanghai.cn” -IPAddress 192.168.1.1
# 这里的 dnsname写 FQDN(命令在dc上执行)
# 查看已经授权的dhcp服务器:
get-dhcpserverindc

·如果子域、RODC域的DHCP无法授权,需要在 林根域DC上用命令授权:
Add-DhcpServerInDC -DnsName "lyon-router.lyon.paris.local" -IPAddress 10.40.0.1
10、配置 ssh密钥对连接:
注意:普通用户直接放在 家目录 .ssh\authorized_keys 中
如果是 Administrator 用户,必须放在 C:\ProgramData\ssh\administrators_authorized_keys
直接把客户端公钥复制进去即可


1)先在 sshd 上开启 sshd:
start-service sshd
set-service sshd -starttype automatic
2)客户端生成密钥对:
ssh-keygen
-t 指定算法
-b 指定长度bit
然后把公钥拷给服务端,重命名为 authorized_keys 或 administrators_authorized_keys 就能连接了
·测试连接:

11、设置机器时区:
用命令设置机器时区:

二、脚本:
1、给Powershell传递参数,然后powershell调用cmd脚本,将参数传入cmd脚本中:

cmd脚本中,powershell的变量用 %,自定义的变量用 %%

2、读取用户表,创建用户:
用 $_.group 这样就能够读取到用户表属性

3、创建用户脚本:



三、BGP:
·注意:windows bgp 邻居 不要同时建立,要一个一个单独建立,否则会出问题
建立好一个之后,再去写下一个邻居的地址
1、IPv4 BGP:
Install-RemoteAccess -RoleType RoutingOnly
Add-BgpRouter -BgpIdentifier 1.1.1.1 -LocalASN 501 -TransitRouting Enabled
2、IPv6 BGP:
先用 netsh interface ipv6 set interface 开启 routing 路由转发
然后 set-bgprouter -ipv6routing enabled -localipv6address [随便指定一个ipv6地址]
然后就能够建立IPv6 BGP邻居了
·BGP 路由聚合:
# 创建路由聚合:
Add-BgpRoute-Aggregate -Prefix 2001:db8:20::/48 -SummaryOnly Enabled
# 然后将路由通告出去:
Add-BgpCustomRoute -Network 2001:db8:20::/48
四、CA:
注意,配置CA前,要按题目先确认 是否加域、是否要改 WorkGroup
1、导入信任 根证书:
certutil -addstore -f root c:\root1.cer
certutil -addstore -f root c:\sub1.cer
2、子CA 手动安装证书:
certutil -installcert c:\sub1.cer
3、使用 命令申请证书:
get-certificate -Template Web -SubjectName cn=www.paris.local -DnsName www.paris.local -CertStoreLocation cert:\LocalMachine\My
# 如果是多个字段:
get-certificate -Template Web -SubjectName "cn=www.paris.local,cn=test.paris.local" -DnsName "www.paris.local","test.paris.local" -CertStoreLocation cert:\LocalMachine\My
4、安装 根CA,设置CACommonName:
Install-AdcsCertificationAuthority -CACommonName worldskills-CA
## 指定CA类型为 企业CA、企业子CA、独立CA
-CAType EnterpriseRootCA //企业根CA
-CAType EnterpriseSubordinateCA //企业子CA
-CAType StandaloneRootCA //独立根CA
## 不指定类型时,WORKGROUP环境 默认是独立根CA,域环境 默认是企业根CA(这个点是GPT说的,具体不太确定,建议加上CAType)
10、创建存储池:
# 先添加4块磁盘
$PhysicalDisks=(Get-PhysicalDisk -CanPool $True)
或获取指定几块磁盘:
## 这里一共有4块盘,编号分别是 5、6、7、8(用 Get-PhysicalDisk查看编号)
$PhysicalDisks=5,6,7 | %{Get-PhysicalDisk -DeviceNumber $_}
# 创建存储池:
New-StoragePool -FriendlyName HRDKOREA-POOL -StorageSubSystemFriendlyName "Windows Storage*" -PhysicalDisks $PhysicalDisks
## 创建虚拟磁盘直接分配最大大小
New-VirtualDisk -StoragePoolFriendlyName HRDKOREA-POOL -FriendlyName RAID5 -ResiliencySettingName Parity -ProvisioningType Fixed -UseMaximumSize
或者精简分配,但是要手动指定大小上限:
New-VirtualDisk -StoragePoolFriendlyName HRDKOREA-POOL -FriendlyName RAID5 -ResiliencySettingName Parity -ProvisioningType Thin -Size 20GB
Set-VirtualDisk -FriendlyName RAID5 -IsManualAttach $False
get-disk //查看磁盘号码
Initialize-Disk -Number 10 -PartitionStyle GPT
New-Partition -DiskNumber 10 -UseMaximumSize -DriveLetter Z
Format-Volume -DriveLetter Z -Filesystem NTFS
get-physicaldisk //先查看物理磁盘,指定一个要被设置为热备的盘
## 将一块不在存储池中的磁盘设置为热备盘
Add-PhysicalDisk -StoragePoolFriendlyName "HRDKOREA-POOL" -PhysicalDisks (Get-PhysicalDisk -DeviceNumber 8) -Usage HotSpare
删除卷:
Get-Partition -DriveLetter Z | Remove-Partition
11、加入域:
Add-Computer -DomainName shanghai.cn
12、使用 windows 内置的端口转发来实现代理(它目前只支持TCP端口的代理)
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=10.0.1.100 connectport=80
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443connectaddress=10.0.1.100 connectport=443

五:AD域:
1、安装AD域控:
1)安装新林:
install-addsforest
2)新增域控到现有域:
新域控的DNS必须要有SRV记录才能被使用
Install-ADDSDomainController -InstallDNS
## 可选参数:
-noglobalcatalog //不作为GC
-readonlyreplica //RODC
## Windows 第二个域控有时候不会自己创建DNS和SRV记录,此时可以先从主服务器复制DNS区域,然后手动生成 SRV记录:
nltest /dsregdns //生成SRV记录
ipconfig /registerdns
restart-service netlogon
3)在现有林中创建新域:
Install-ADDSDomain
Install-ADDSDomain -NewDomainName "company.cn" -ParentDomainName "skills.com" -DomainType TreeDomain -InstallDNS
4)创建子域:
Install-ADDSDomain -NewDomainName "gz" -ParentDomainName "skills.com" -DomainType ChildDomain -InstallDNS
5)创建新林,但是本机不安装dns:
## DC:
install-addsforest -installdns:$false
## DNS机器:
install-windowsfeature dns -in..
然后必须创建出DNS区域(不需要记录),并且将动态更新设置为 Nonsecure and secure

然后在DC上将dns服务器地址指向 DNS机器,然后打开停止并启动 netlogon 服务:
restart-service netlogon
这样 _msdcs 记录就自动生成了,然后可以再在DC上自动生成主机名记录:
ipconfig /registerdns
然后这样其他机器就能够加域了
六、VPN:
·证书记得要加上 IKE 字段
1、s2s:
·自定义 IKEv2 算法:
记得加 persistent 参数,让vpn接口持久化建立连接
# 设置VPN接口算法:
Add-VpnS2SInterface -Name fw.shanghai.cn -Destination fw.shanghai.cn -Protocol IKEv2 -AuthenticationMethod MachineCertificates -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -CipherTransformConstants AES256 -Persistent -CustomPolicy
可选:
-AuthenticationTransformConstants SHA256128
-PfsGroup PFS2048
# 同时要设置RRAS全局IKEv2算法为一样的值:
Set-VpnServerConfiguration -TunnelType IKEv2 -CustomPolicy -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -CipherTransformConstants AES256
可选:
-AuthenticationTransformConstants SHA256128
-PfsGroup PFS2048

# 如果有拨号VPN,要同时修改VPN客户端的算法:
Set-VpnConnectionIPsecConfiguration -ConnectionName IKEv2 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -CipherTransformConstants AES256
可选:
-AuthenticationTransformConstants SHA256128
-PfsGroup PFS2048

·让 S2S 能够通过IPv6流量:
要开启IPv6 路由转发

# 有时图形化开启会报错,需要用命令开启:
netsh ras set type ipv4rtrtype=LANANDDD ipv6rtrtype=LANANDD rastype=none

然后添加 IPv6 路由指向 S2S 接口就行:

2、Remote Access:
·SSTP 关闭证书吊销验证:
修改注册表,不验证证书吊销列表
regedit
在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SstpSvc\Parameters 下新建DWORD(32位) “NoCertRevocationCheck”,值为1

七、adfs、wap:
·证书字段:
# 证书必须要有以下字段(可以全部写在一张证书中):
ADFS:
1、enterpriseregistration.test.com
2、连接名称,例如:adfs.test.com
wap:
1、wap必须要加上wap机器当前的主机名,例如:Server2.test.com
2、必须要包含 wap代理域名的 外网URL、内网URL
workfolder:
1、workfolder连接名称,例如:work.test.com
最后加上 *.域名
1、workfolder、adfs、wap:
# ADFS必须有两条DNS记录:
一条是:enterpriseregistration 例如:enterpriseregistration.test.com
一条是可以自定义的 adfs连接域名 例如:adfs.test.com
都指向ADFS自己
# 证书也要包含这些字段
·配置 adfs:
创建声明规则

https://windows-server-work-folders/V1

放行权限这里,everyone只能放行本地的域,如果要放行对端域,需要用 Permit Specific group 来同时指定本地和对端

添加依赖方属性:


·可以用命令导出,然后复制到 Server Core 导入:
(Get-AdfsRelyingPartyTrust).IssuanceTransformRules
![]()
# 在 adfs 上复制导出的内容:
Set-AdfsRelyingPartyTrust -TargetName "WorkFolders" -IssuanceTransformRules '@RuleName="WorkFolders" c:[Type=="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",Issuer=="AD AUTHORITY"]=>issue(store="Active Directory",types=("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"),query=";userPrincipalName,displayName,sn,givenName;{0}",param=c.Value);'
·授权adfs、开启测试页面:
Grant-AdfsApplicationPermission -ServerRoleIdentifier "https://windows-server-work-folders/V1" -AllowAllRegisteredClients -ScopeNames openid,profile
Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
# 如果内网客户端也要使用 adfs认证(关闭它的windows身份认证):
Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider @("FormsAuthentication","MicrosoftPassportAuthentication")
·配置 wap:
·禁用 TLS 1.3:

·workfolder:
·注意,workfolder 必须要有一个 443站点绑定了443证书,否则无法使用
设置workfolder使用 adfs进行认证:


点击OK
2、Web、adfs、wap:
·配置 adfs:
创建声明感知:
这里的URL要写外网的
Add-AdfsRelyingPartyTrust -Name "Web-PreAuth" -Identifier "https://external.cn2026.mo/" -WSFedEndpoint "https://external.cn2026.mo/" -AccessControlPolicyName "Permit everyone"
# 如果要指定组:
Add-AdfsRelyingPartyTrust -Name "Web-PreAuth" -Identifier "https://external.cn2026.mo/" -WSFedEndpoint "https://external.cn2026.mo/" -AccessControlPolicyName "Permit specific group" -AccessControlPolicyParameters "CN2026\WebUsers"
测试过了,虽然都是声明感知,但是web这里不需要像 wap 一样配置 UPN那些字段,可以直接代理
Grant-AdfsApplicationPermission -ServerRoleIdentifier "https://external.cn2026.mo/" -AllowAllRegisteredClients -ScopeNames openid,profile
·配置 WAP



八、RDS:
·注意:RDC 不能装在 ServerCore 上,会报错
·图形化有时无法创建 rd 会话集合,需要用命令创建:
用命令创建的合集默认允许访问的用户组:Domain Users
# 需要使用命令创建:
New-RDSessionCollection -ConnectionBroker server1.shanghai.org -CollectionName RDS -SessionHost Server2.shanghai.org,Server3.shanghai.org

·如果有两个域,配置RDS后,可以设置允许两个域的用户组访问(必须命令行设置、需要先双向信任):
Set-RDSessionCollectionConfiguration -CollectionName "RemoteApps" -UserGroup @("PARIS\Domain Users","LYON\Domain Users")
·自动连接 RemoteApp:
# 路径
用户配置 > 策略 > 管理模板 > Windows组件 > 远程左面服务 > RemoteApp和桌面连接 > 指定默认连接URL


·(SSO,只对域内客户端永久有效,只有域内客户端、服务器能够生效)可以让它不弹身份认证框:
在域控上编辑组策略:
# 组策略路径:
Computer Configuration - Administrative Templates - System - Credentials Delegation - "Allow delegating default credentials"
## 中文路径:
计算机配置 - 管理模板 - 系统 - 凭据委派 - 允许委派默认凭证


这里写 RDweb 和 RD网关的域名,前面需要用 * 号,因为有时RD会话主机与RD网关不在同一台机器,就要再写上RD会话主机的域名,比较麻烦,所以可以直接写 *(不能直接整个写 *,不写任何域名)

这个前缀在说明中能抄:

·客户端同步组策略后 必须要重启机器才会生效,logoff不行(对于server和客户端都能够生效)
九、磁盘:
1、NFS 共享:
服务端:

创建 NFS 共享:

windows 要开启 NFS客户端 功能:

·配置 自动挂载:

编写组策略:
将该脚本放到 public的desktop,开启自动运行这个脚本
2、iSCSI:
十、WSL:
1、预安装的 wsl 可能无法正常使用:
# 修改 locale,否则root用户无法正常使用命令:
vi /etc/default/locale
![]()
然后 wsl --shutdown 重新再打开wsl即可
# 挂载镜像:
## 先挂载 debian 镜像到虚拟机上
## 格式:drvfs

十一、组策略:
1、自动颁发用户证书:



十二:Ansible:
1、IIS:
# 可以使用的模块:
win_iis_website //只能创建http站点
microsoft.iis.website //可以同时创建80和443站点
win_file //state: directory 幂等创建目录;state: touch 幂等创建文件
win_lineinfile //幂等将内容写入文件
(1)同时创建80 和443站点:
这里写入 index.html,可以用模块:win_copy: content


这里的 certificate_hash 就是证书指纹
能同时配置http和https是因为这里bindings定义了两个端口(ansible-doc 中有模板)
(2)创建Web(复杂需求):

# 还没全部完成,大体的框架是做出来了

add.yml:


(3)状态页面:

status.html.j2:

剧本:

(4)如果只需要创建 80站点:
使用 win_iis_website会简单一点

2、创建用户、OU、组:
# 可以使用的模块:
microsoft.ad.user //幂等创建 AD域用户
microsoft.ad.group //幂等创建 AD域组
win_user //幂等创建 本地用户
win_group //幂等创建 本地组
(1)创建 OU、组、用户:

# 这里脚本有一些比较复杂的点:
1、因为这里要用两个 loop,每个loop的变量都是item,因此会冲突覆盖,因此要用 loop_control,将外层的loop的变量设置为 u
2、因为要用两个loop,但是一个 tasks中不能用两个loop,因此要用 include_tasks调用另一个yml剧本
3、因为json文件中给定的是一个范围,因此要用range 读取json中的变量
4、range 输出的范围,例如 1 ~ 25,只会给出 1 ~ 24,因此末尾需要 + 1
5、因为变量是字符串,不能直接加减运算,因此要 | int 转为 数字格式
6、因为要求用户是 sales01 - 25,因此要配置 '%02d' | format(数字) 进行补0
7、这里要定义 homedirectory和homedrive,要使用 attributes 来定义。

user.yml:

(2)创建域用户:

必须要加 update_password:on_create 才是幂等创建,否则每次都会更新密码
(3)2024 题目:



或:
·优化剧本:
题目要求要同时对子域和当前域创建,并且这里有的OU路径还是 dc=lyon

---
- name: paris site share folder
hosts: DMZ-1
gather_facts: false
tasks:
- name: Create a group in a custom path
microsoft.ad.ou:
name: "{{ item.ou.split(',')[0].split('=')[1] }}"
path: DC=paris,DC=local
domain_server: SH-INTERNAL-1.paris.local
domain_username: administrator@paris
domain_password: Skills39
state: present
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
- name: Create a read group in a custom path
microsoft.ad.group:
name: "{{ item.read }}"
path: "{{ item.ou }}"
scope: domainlocal
#path: OU=groups,DC=ansible,DC=local
domain_server: SH-INTERNAL-1.paris.local
domain_username: administrator@paris
domain_password: Skills39
state: present
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
- name: Create a write group in a custom path
microsoft.ad.group:
name: "{{ item.write }}"
path: "{{ item.ou }}"
scope: domainlocal
#path: OU=groups,DC=ansible,DC=local
domain_server: SH-INTERNAL-1.paris.local
domain_username: administrator@paris
domain_password: Skills39
state: present
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
- name: Create Directory
win_file:
path: "c:\\project_share\\{{ item.name }}"
state: directory
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
- name: disable other user
ansible.windows.win_acl_inheritance:
path: "c:\\project_share\\{{ item.name }}"
state: absent
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
- name: write
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: "{{ item.write }}"
rights: fullcontrol
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
tags: t1
- name: write
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: SYSTEM
rights: fullcontrol
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
tags: t2
- name: write
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: administrators
rights: fullcontrol
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
tags: t3
- name: read
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: "{{ item.read }}"
rights: read
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
- name: Add secret share
ansible.windows.win_share:
name: "{{ item.name }}"
path: "c:\\project_share\\{{ item.name }}"
full: "{{ item.write }}"
read: "{{ item.read }}"
loop: "{{ file_shares }}"
when: "'lyon' not in item.ou"
tags: t4
- name: lyon site share folder
hosts: BJ-INTERNAL-1
gather_facts: false
tasks:
- name: Create a group in a custom path
microsoft.ad.ou:
name: "{{ item.ou.split(',')[0].split('=')[1] }}"
path: DC=lyon,DC=paris,DC=local
domain_server: BJ-INTERNAL-1.lyon.paris.local
domain_username: administrator@lyon
domain_password: Skills39
state: present
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
- name: Create a read group in a custom path
microsoft.ad.group:
name: "{{ item.read }}"
path: "{{ item.ou }}"
scope: domainlocal
#path: OU=groups,DC=ansible,DC=local
domain_server: BJ-INTERNAL-1.lyon.paris.local
domain_username: administrator@lyon
domain_password: Skills39
state: present
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
- name: Create a write group in a custom path
microsoft.ad.group:
name: "{{ item.write }}"
path: "{{ item.ou }}"
scope: domainlocal
#path: OU=groups,DC=ansible,DC=local
domain_server: BJ-INTERNAL-1.lyon.paris.local
domain_username: administrator@lyon
domain_password: Skills39
state: present
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
- name: Create Directory
win_file:
path: "c:\\project_share\\{{ item.name }}"
state: directory
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
- name: disable other user
ansible.windows.win_acl_inheritance:
path: "c:\\project_share\\{{ item.name }}"
state: absent
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
- name: write
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: "{{ item.write }}"
rights: fullcontrol
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
tags: t1
- name: write
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: SYSTEM
rights: fullcontrol
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
tags: t2
- name: write
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: administrators
rights: fullcontrol
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
tags: t3
- name: read
ansible.windows.win_acl:
path: "c:\\project_share\\{{ item.name }}"
user: "{{ item.read }}"
rights: read
type: allow
state: present
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
- name: Add secret share
ansible.windows.win_share:
name: "{{ item.name }}"
path: "c:\\project_share\\{{ item.name }}"
full: "{{ item.write }}"
read: "{{ item.read }}"
loop: "{{ file_shares }}"
when: "'lyon' in item.ou"
tags: t4
3、备份文件:
# 可用的模块:
win_copy //将 Ansible 本机的文件文件夹 拷给 Windows
win_robocopy //在 Windows 和 Windows 之间复制文件、文件夹
# 示例:
community.windows.win_robocopy:
src: C:\Data
dest: \\server2\backup //需要能够访问到
recurse: true
delegate_to:Server1 //最好指定在哪台机器执行,指定server1就是将server1的文件夹复制过去
(1)备份 web 根目录、DFS 目录:

# 这里脚本有一些比较复杂的点:
1、因为要调用两个when,并且要同时匹配两个条件,因此要在 when中用 and 来定义两个条件(如果同时写两个when条件,就是 or ,无论匹配上哪个条件都可)(或者用列表来写when的多个条件,这样用列表就等于用 when ... and ...)
2、并且还要5分钟内多次执行剧本将会退出并返回一段消息,所以这里剧本结尾创建一个文件,剧本开头去查看这个文件是否是5分钟内修改的,如果是,就debug一个信息,并且用 meta: end_play 终止剧本
3、在两台windows间复制文件、文件夹,用 win_robocopy 模块最好

