---
- name: PowerShell DSC
  hosts: "{{ _hosts | default('os_windows') }}"
  gather_facts: false

  tasks:
    - name: Setup PsGallery
      ansible.windows.win_powershell:
        script: |
          $nuget_version = (Get-PackageProvider -Name NuGet -ListAvailable).version
          $nuget_target_version = [Version]::new('2.8.5.201')
          if( $nuget_version -lt $nuget_target_version ){
            [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
            Install-PackageProvider -Name NuGet -MinimumVersion $nuget_target_version -Force
            Install-Module -Name packagemanagement -Force
            Install-Module -Name powershellget -Force
          }

    - name: Setup the SecurityPolicyDSC module
      community.windows.win_psmodule:
        name: SecurityPolicyDSC
        module_version: 2.10.0.0
        state: present
        accept_license: true

    - name: Set password history
      ansible.windows.win_dsc:
        resource_name: AccountPolicy
        Name: Enforce_password_history
        Enforce_password_history: 24

    - name: Set maximum password age
      ansible.windows.win_dsc:
        resource_name: AccountPolicy
        Name: Maximum_Password_Age
        Maximum_Password_Age: 60

    - name: Set minimum password age
      ansible.windows.win_dsc:
        resource_name: AccountPolicy
        Name: Minimum_Password_Age
        Maximum_Password_Age: 20

    - name: Set minimum password length
      ansible.windows.win_dsc:
        resource_name: AccountPolicy
        Name: Minimum_Password_Length
        Maximum_Password_Age: 8

    - name: Set password complexity requirements
      ansible.windows.win_dsc:
        resource_name: AccountPolicy
        Name: Password_must_meet_complexity_requirements
        Password_must_meet_complexity_requirements: Enabled
