<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
Using fetch to get files from windows hosts fails if the filename can be interpreted as a powershell wildcard. For example "new[12].txt"

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
connection winrm.py


##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.10.4
  config file = /home/aniess/ansible/inhouse/ansible.cfg
  configured module search path = ['/home/aniess/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/aniess/.local/lib/python3.6/site-packages/ansible
  executable location = /home/aniess/.local/bin/ansible
  python version = 3.6.9 (default, Oct  8 2020, 12:12:24) [GCC 8.4.0]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
CACHE_PLUGIN(/home/aniess/ansible/inhouse/ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/home/aniess/ansible/inhouse/ansible.cfg) = ./tmp
DEFAULT_GATHERING(/home/aniess/ansible/inhouse/ansible.cfg) = smart
DEFAULT_HOST_LIST(/home/aniess/ansible/inhouse/ansible.cfg) = ['/home/aniess/ansible/inhouse/inventory/inventory.yml']
DEFAULT_STDOUT_CALLBACK(/home/aniess/ansible/inhouse/ansible.cfg) = yaml
DEFAULT_VAULT_PASSWORD_FILE(/home/aniess/ansible/inhouse/ansible.cfg) = /home/aniess/ansible/inhouse/pw_vault_prod
DISPLAY_ARGS_TO_STDOUT(/home/aniess/ansible/inhouse/ansible.cfg) = True
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
Ansible host is Ubuntu 18.04. Target is Windows Server 2019 (1809) 


##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->
Create File named "C:\www\new[12].txt" on Windows host and run task below
<!--- Paste example playbooks or commands between quotes below -->
```yaml
  - name: Fetch test
    fetch:
      src: C:\www\new[12].txt
      dest: test

```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
File is retrieved from Windows host


##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
Ansible aborts with the error below.
<!--- Paste verbatim command output between quotes -->
```paste below
TASK [Fetch test src=C:\www\new[12].txt, dest=test] *********************************************************************************************************************
Traceback (most recent call last):
  File "/home/aniess/.local/lib/python3.6/site-packages/ansible/plugins/connection/winrm.py", line 682, in fetch_file
    raise IOError(to_native(result.std_err))
OSError: #< CLIXML
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><Obj S="progress" RefId="0"><TN RefId="0"><T>System.Management.Automation.PSCustomObject</T><T>System.Object</T></TN><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><Obj S="progress" RefId="1"><TNRef RefId="0" /><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS></Obj><S S="Error">Set-StrictMode -Version Latest_x000D__x000A_</S><S S="Error">$path = 'C:\www\new[12].txt'_x000D__x000A_</S><S S="Error">If (Test-Path -Path $path -PathType Leaf)_x000D__x000A_</S><S S="Error">{_x000D__x000A_</S><S S="Error">$buffer_size = 524288_x000D__x000A_</S><S S="Error">$offset = 0_x000D__x000A_</S><S S="Error">$stream = New-Object -TypeName IO.FileStream($path, [IO.FileMode]::Open, [IO.FileAccess]::Read, _x000D__x000A_</S><S S="Error">[IO.FileShare]::ReadWrite)_x000D__x000A_</S><S S="Error">$stream.Seek($offset, [System.IO.SeekOrigin]::Begin) &gt; $null_x000D__x000A_</S><S S="Error">$buffer = New-Object -TypeName byte[] $buffer_size_x000D__x000A_</S><S S="Error">$bytes_read = $stream.Read($buffer, 0, $buffer_size)_x000D__x000A_</S><S S="Error">if ($bytes_read -gt 0) {_x000D__x000A_</S><S S="Error">$bytes = $buffer[0..($bytes_read - 1)]_x000D__x000A_</S><S S="Error">[System.Convert]::ToBase64String($bytes)_x000D__x000A_</S><S S="Error">}_x000D__x000A_</S><S S="Error">$stream.Close() &gt; $null_x000D__x000A_</S><S S="Error">}_x000D__x000A_</S><S S="Error">ElseIf (Test-Path -Path $path -PathType Container)_x000D__x000A_</S><S S="Error">{_x000D__x000A_</S><S S="Error">Write-Host "[DIR]";_x000D__x000A_</S><S S="Error">}_x000D__x000A_</S><S S="Error">Else_x000D__x000A_</S><S S="Error">{_x000D__x000A_</S><S S="Error">Write-Error "$path does not exist";_x000D__x000A_</S><S S="Error">Exit 1;_x000D__x000A_</S><S S="Error">} : C:\www\new[12].txt does not exist_x000D__x000A_</S><S S="Error">    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException_x000D__x000A_</S><S S="Error">    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException_x000D__x000A_</S><S S="Error"> _x000D__x000A_</S></Objs>
fatal: [www]: FAILED! => 
  msg: failed to transfer file to "/home/aniess/ansible/inhouse/test/www/C:/www/new[12].txt"
```

##### FIX
Using -LiteralPath to prevent Test-Path from evaluating wildcards fixes the issue for me:
``` diff
diff --git a/lib/ansible/plugins/connection/winrm.py b/lib/ansible/plugins/connection/winrm.py
index 6ab6ca7bc4..85de3fad2e 100644
--- a/lib/ansible/plugins/connection/winrm.py
+++ b/lib/ansible/plugins/connection/winrm.py
@@ -646,7 +646,7 @@ class Connection(ConnectionBase):
                 try:
                     script = '''
                         $path = "%(path)s"
-                        If (Test-Path -Path $path -PathType Leaf)
+                        If (Test-Path -LiteralPath $path -PathType Leaf)
                         {
                             $buffer_size = %(buffer_size)d
                             $offset = %(offset)d
```

- name: ansible_winrm_transport
      kerberos_command:
        description: kerberos command to use to request a authentication ticket
        default: kinit
        vars:
          - name: ansible_winrm_kinit_cmd
        type: str
      kinit_args:
        description:
        - Extra arguments to pass to C(kinit) when getting the Kerberos authentication ticket.
        - By default no extra arguments are passed into C(kinit) unless I(ansible_winrm_kerberos_delegation) is also
          set. In that case C(-f) is added to the C(kinit) args so a forwardable ticket is retrieved.
        - If set, the args will overwrite any existing defaults for C(kinit), including C(-f) for a delegated ticket.
        type: str
        vars:
          - name: ansible_winrm_kinit_args
        version_added: '2.11'
      kinit_env_vars:
        description:
        - A list of environment variables to pass through to C(kinit) when getting the Kerberos authentication ticket.
        - By default no environment variables are passed through and C(kinit) is run with a blank slate.
        - The environment variable C(KRB5CCNAME) cannot be specified here as it's used to store the temp Kerberos
          ticket used by WinRM.
        type: list
        elements: str
        default: []
        ini:
        - section: winrm
          key: kinit_env_vars
        vars: