import ctypes
import subprocess


# Change the server example "RTFserver.com" 
Server = 'RTFserver'
Ext = 'com'


class disable_file_system_redirection:
    _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
    _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection

    def __enter__(self):
        self.old_value = ctypes.c_long()
        self.success = self._disable(ctypes.byref(self.old_value))

    def __exit__(self, type, value, traceback):
        if self.success:
            self._revert(self.old_value)


def ExecuteCmd(cmd):
    with disable_file_system_redirection():
        obj = subprocess.Popen(["powershell", cmd], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        out, err = obj.communicate()
        return out, err


GPO = (r'''New-GPO -Name "ShowFileExtension" | set-gpregistryvalue -key
 "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -ValueName "HideFileExt" -type DWORD -Value 0 |
New-GPLink -Target "dc=''' + Server + r''',dc=''' + Ext + r'''" -LinkEnabled "yes" ''').replace('\n', '')

CheckGPO = ExecuteCmd(r'Get-GPO "ShowFileExtension"')
if CheckGPO[0] == '':
    Res = ExecuteCmd(GPO)
    if Res[1] == '':
        print Res[0]
        ExecuteCmd('gpupdate')
        ExecuteCmd('Stop-Process -processName: Explorer -force')
        print 'Script executed successfully'
    else:
        print 'Script execution failed'
else:
    print 'Group policy already exists'