import subprocess
import os
import ctypes
import socket

excepUser = itsm.getParameter('excepUser').split(',')
excepLst = ['Administrator', 'DefaultAccount', 'Guest', 'WDAGUtilityAccount']
excepLst.extend(excepUser)


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


def remUser(accountName):
    CMD = "net user " + accountName + " /delete"
    delUser = ExecuteCmd(CMD)[0]
    if "successfully" in delUser:
        try:
            path = "C:\\Users\\" + accountName
            if os.path.exists(path):
                Rcmd = 'rm "%s" -r -force' % path
                ExecuteCmd(Rcmd)
            Cmnd = r'Get-CimInstance -Class Win32_UserProfile | Where-Object { $_.LocalPath.split("\")[' \
                   r'-1] -eq "%s" } | Remove-CimInstance ' % accountName
            ExecuteCmd(Cmnd)
            print "User Removed " + accountName
        except Exception as e:
            print e
            pass
    else:
        print "Error deleting User: " + accountName


UserList = ExecuteCmd("(Get-LocalUser).name")[0].strip().split("\r\n")
if len(UserList) > 0:
    UWFlag = False
    for i in UserList:
        if i not in excepLst:
            remUser(i)
            UWFlag = True
    if not UWFlag:
        print "unwanted user does not exists at " + socket.gethostname()
else:
    print "Error getting user name"
