Hi
I am trying to run a simple playbook to run a Powershell script. But it keeps failing.
If I run the Powershell script directly on the server it works fine. Below is the play book ans the script.
Is there something that needs to be done to get Ansible to run the Powershell script?
Powershell Scripts (rdp.ps1)
Enable Remote Desktop
set-ItemProperty -Path ‘HKLM:SystemCurrentControlSetControlTerminal Server’-name “fDenyTSConnections” -Value 0
Playbook:
Looks like you have lost some backslashes somehow
instead of
set-ItemProperty -Path ‘HKLM:SystemCurrentControlSetControlTerminal Server’-name “fDenyTSConnections” -Value 0
try
set-ItemProperty -Path ‘HKLM:System\CurrentControlSet\Control\Terminal Server’-name “fDenyTSConnections” -Value 0
Or, if you are running ansible 2.0, try using the win_regedit module
http://docs.ansible.com/ansible/win_regedit_module.html
Something like (not tested):
win_regedit:
key: 'HKLM:\System\CurrentControlSet\Control\Terminal Server'
value: fDenyTSConnections
data: 0
datatype: dword
Hope this helps,
Jon
Thanks for the response!
I have tried the following Powershell options:
set-ItemProperty -Path ‘HKLM:System\CurrentControlSet\Control\Terminal Server’-name “fDenyTSConnections” -Value 0
set-ItemProperty -Path ‘HKEY_LOCAL_MACHINE:System\CurrentControlSet\Control\Terminal Server’ -name “fDenyTSConnections” -Value 0
set-ItemProperty -Path ‘HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server’ -name “fDenyTSConnections” -Value 0
But none of them work. Got the following error with the option you suggested.
fatal: [10.10.3.170]: FAILED! => {“changed”: false, “failed”: true, “invocation”: {“module_args”: {“raw_params": “set-ItemProperty -Path ‘HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server’ -name "fDenyTSConnections" -Value 0”}, “module_name”: “raw”}, “rc”: 1, “stderr”: “#< CLIXML\r\n<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04\”><S S="Error">set-ItemProperty : Cannot find path ‘C:\Users\Administrator\HKEY_LOCAL_MACHINE\x000D__x000A<S S="Error">System\CurrentControlSet\Control\Terminal Server’ because it does not exist.x000D__x000A<S S="Error">At line:1 char:1_x000D__x000A<S S="Error">+ set-ItemProperty -Path x000D__x000A<S S="Error">'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Term …x000D__x000A<S S="Error">+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x000D__x000A<S S="Error">~x000D__x000A<S S="Error"> + CategoryInfo : ObjectNotFound: (C:\Users\Admini…Terminal Serv x000D__x000A<S S="Error"> er:String) [Set-ItemProperty], ItemNotFoundException_x000D__x000A_<S S="Error"> + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetIt x000D__x000A<S S="Error"> emPropertyCommand_x000D__x000A_<S S="Error"> x000D__x000A”, “stdout”: “”, “stdout_lines”: }
I have no doubt if I used the win_regedit it would work. But Im trying to figure out why Ansible is not able to run a simple Powershell script from a playbook?
Why am I able to run that script successfully from the machine, but it fails when Ansible ties to execute it from a playbook.
This is the part of the error that concerns me:
<S S="Error">set-ItemProperty : Cannot find path 'C:\Users\Administrator\HKEY_LOCAL_MACHINE\x000D__x000A
Why is Ansible trying to find the path in C:\ when this is a registry script?
Any ideas would be appreciated.
Cheers
Mark
My apologies, I missed the leading slash after the ‘drive name’ ( For some reason powershell has its own notion of ‘drives’ which include parts of the registry - HKLM: is the name of the powershell drive that maps to the HKEY_LOCAL_MACHINE part ot the registry.)
Set-ItemProperty -Path ‘HKLM:\System\CurrentControlSet\Control\Terminal Server’ -name “fDenyTSConnections” -Value 0
Hope this helps,
Jon
You are absolutely right mate!! I literally had tried every way except that!
Once I made that change to the registry entries in the Powershell scripts all the playbooks starting to run successfully.
Thanks for your help!