- set_fact: varname: WINPATH_TEST - name: Remove {{ varname }} vars from user and machine scope raw: '[Environment]::SetEnvironmentVariable("{{ varname }}", $null, "User"); [Environment]::SetEnvironmentVariable("{{ varname }}", $null, "Machine")' - name: Set a var at the machine and user levels win_path: name: "{{ varname }}" elements: C:\{{ item }}Path scope: "{{ item }}" with_items: - machine - user register: pathout - name: Get path value from machine and user levels raw: '[Environment]::GetEnvironmentVariable("{{ varname }}","{{ item.item }}")' with_items: "{{ pathout.results }}" register: varout - name: Ensure output assert: that: - item.0 | changed - item.0.path_value == "C:\\" + item.0.item + "Path" - item.1.stdout_lines[0] == 'C:\\' + item.0.item + 'Path' with_together: - "{{ pathout.results }}" - "{{ varout.results }}" - name: Remove {{ varname }} vars from user and machine scope raw: '[Environment]::SetEnvironmentVariable("{{ varname }}", $null, "User"); [Environment]::SetEnvironmentVariable("{{ varname }}", $null, "Machine")' - name: Create multi-element path win_path: name: "{{ varname }}" elements: - C:\PathZ - C:\PathA register: multiout - name: Get path value raw: $env:{{ varname }} register: varout - name: Ensure output assert: that: - multiout | changed - multiout.path_value == "C:\\PathZ;C:\\PathA" - varout.stdout_lines[0] == "C:\\PathZ;C:\\PathA" - name: Add value to middle and end win_path: name: "{{ varname }}" elements: - C:\NewPath - C:\PathA - 'C:\PathWithTrailingBackslash\' # store with a trailing backslash - '"C:\Quoted;With;Semicolons"' # embedded semicolon, wrapped in quotes - '%SystemRoot%\stuff' register: addout - name: Get path value raw: $env:{{ varname }} register: varout - name: Test idempotence- retry values to middle and end, test case-insensitive comparison, backslash canonicalization win_path: name: "{{ varname }}" elements: - c:\nEwPaTh - c:\patha - C:\pathwithtrailingbackslash # no trailing backslash, should be the same - '"C:\Quoted;With;Semicolons"' - '%SystemRoot%\stuff' register: idemout - name: Get path value raw: $env:{{ varname }} register: idemvarout - name: Ensure output assert: that: - addout | changed - addout.path_value == 'C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - varout.stdout_lines[0] == ('C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff') - not idemout | changed - idemout.path_value == 'C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - idemvarout.stdout_lines[0] == ('C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff') - name: Remove single element win_path: name: "{{ varname }}" elements: C:\NewPath state: absent register: removeout - name: Get path value raw: $env:{{ varname }} register: varout - name: Test idempotence- retry remove single element win_path: name: "{{ varname }}" elements: C:\NewPath state: absent register: idemremoveout - name: Get path value raw: $env:{{ varname }} register: idemvarout - name: Ensure output assert: that: - removeout | changed - removeout.path_value == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - varout.stdout_lines[0] == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff' - not idemremoveout | changed - idemremoveout.path_value == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - idemvarout.stdout_lines[0] == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff' - name: Remove multiple elements win_path: name: "{{ varname }}" elements: - C:\PathWithTrailingBackslash # no trailing backslash - c:\pathz - '"C:\Quoted;With;Semicolons"' - '%SystemRoot%\stuff\' # add trailing backslash state: absent register: removeout - name: Get path value raw: $env:{{ varname }} register: varout - name: Ensure output assert: that: - removeout | changed - removeout.path_value == "C:\\PathA" - varout.stdout_lines[0] == "C:\\PathA" - name: Test check mode add check_mode: yes win_path: name: "{{ varname }}" elements: - C:\MissingPath register: checkadd - name: Get path value raw: $env:{{ varname }} register: checkaddvarout - name: Test check mode remove check_mode: yes win_path: name: "{{ varname }}" elements: C:\PathA state: absent register: checkremove - name: Get path value raw: $env:{{ varname }} register: checkremovevarout - name: Ensure output assert: that: - checkadd | changed - checkadd.path_value == "C:\\PathA;C:\\MissingPath" - checkaddvarout.stdout_lines[0] == "C:\\PathA" # shouldn't have actually changed the value - checkremove | changed - checkremove.path_value == "" - checkremovevarout.stdout_lines[0] == "C:\\PathA" # shouldn't have actually changed the value - name: Remove {{ varname }} vars from user and machine scope raw: '[Environment]::SetEnvironmentVariable("{{ varname }}", $null, "User"); [Environment]::SetEnvironmentVariable("{{ varname }}", $null, "Machine")'