<!--- 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
```

from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = """
    author: Ansible Core Team
    name: winrm
    short_description: Run tasks over Microsoft's WinRM
    description:
        - Run commands or put/fetch on a target via WinRM
        - This plugin allows extra arguments to be passed that are supported by the protocol but not explicitly defined here.
          They should take the form of variables declared with the following pattern C(ansible_winrm_<option>).
    version_added: "2.0"
    extends_documentation_fragment:
        - connection_pipelining
    requirements:
        - pywinrm (python library)
    options:
      # figure out more elegant 'delegation'
      remote_addr: