Windows剧本汇总.note
一、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会简单一点

二、创建用户、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三、备份文件:
# 可用的模块:
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 模块最好
