Location: PHPKode > scripts > Gerenciamento do windows por COM > gerenciamento-do-windows-por-com/class.ServerAdminWin.php
<?php
/**
*	Classe para gerenciamento do windows.
*	Created on 29/07/2008
*	@author Diego B. Pimentel (hide@address.com)
*	@version 1.0
*	@package Windows
*/
class  ServerAdminWin
{

	/**
	 * Nome do computador.
	 * @access public
	 */	
	public $computer = '';	
	
	/**
	 * Objeto COM do windows.
	 * @access public
	 */	
	public $win = '';	
			
	// __construct() {{{

	/** 
	* Construtor que seleciona o nome do servidor onde sera adinistrado o WMS
	*
	* @access public
	*/	
	public function __construct() 
	{
		$this -> win = new COM('winmgmts:\\\\.\root\cimv2');
		$network = new COM('WScript.Network');
		$this -> computer = $network -> ComputerName;		
	}


	// alterPass() {{{
	/** 
	* Altera senha do usuario
	* 
	* Example:
	* <code>
	* require_once 'class.ServerAdminWin.php'
	* $AdminWin = new ServerAdminWin();
	* $retorno = $AdminWin -> alterPass(array(
	* 	'name' => 'diegotv',
	* 	'senha' => '102030'
	* ));
	*
	* echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];	
	*
	* </code>
	*
	* @param ('name' => '' , 'pass' => '' )
	*
	* @return array
	* @access public
	*/	
	public function alterPass( array $params=array() )
	{
		if(strtolower($params['name']) == 'administrador' || strtolower($params['name']) == 'administrator')
		{
			return array(false , 'Nao permitido alterar usuario administrador!');
		}
		try
		{
			$usuario = $params['name'];
			$senha = $params['pass'];
			$users = $this -> win -> ExecQuery('SELECT * FROM Win32_UserAccount');	
			foreach($users as $user)
			{
				if($user -> Name == $usuario)
				{		
	
						$usr = new COM("WinNT://".$this->computer."/".$usuario.",user") ;
						$usr -> SetPassword ($senha);
						$usr -> SetInfo();
						return array( true , 'Usuario alterado com sucesso');				
				}
			}
			return array(false , 'Usuario não encontrado');
		}catch(com_exception $e) 
		{
			return array(false ,  $e->getMessage());
		}			
	}
	// }}}	
	
	// addUser() {{{
	/** 
	* Adiciona usuario no servidor
	* 
	* Example:
	* <code>
	* require_once 'class.ServerAdminWin.php'
	* $AdminWin = new ServerAdminWin();
	* $retorno = $AdminWin -> addUser(array(
	* 	'name' => 'diegotv',
	* 	'senha' => '102030'
	* ));
	*
	* echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];
	*
	* </code>
	*
	* @param array ('name' => '' , 'pass' => '' )
	*
	* @return array
	* @access public
	*/	
	public function addUser( array $params=array() )
	{
		if(strtolower($params['name']) == 'administrador' || strtolower($params['name']) == 'administrator')
		{
			return array(false , 'Nao permitido adicionar usuario administrador!');
		}
		
		if(!preg_match('/^([a-zA-Z0-9.\-_+$@])*$/' ,$params['name']))
		{
			return array( false , 'Nome com caracteres invalidos!');
		}

		if(!preg_match('/^([a-zA-Z0-9])*$/' ,$params['senha']))
		{
			return array( false , 'Senha com caracteres invalidos!');
		}
	
		$usuario = substr(preg_replace('/([^a-zA-Z0-9])/','',$params['name']), 0, 20);
		try
		{
			$usuario = $params['name'];
			$senha = $params['pass'];	
			$users = $this -> win -> ExecQuery('SELECT * FROM Win32_UserAccount');			
			foreach($users as $user)
			{
				if($user -> Name == $usuario)
				{
					return array( false , 'Usuario já cadastrado, solicite outro nome para o mesmo');
				}
			}
			$cont = new COM('WinNT://'.$this -> computer.',computer');
			$oUser = $cont -> Create('user', $usuario);
			$oUser -> Put( "Fullname", $usuario.' Streaming' );
			$oUser -> Put( "Description", $usuario.' Streaming' );			
			$oUser -> SetPassword ($senha);			
			$oUser -> SetInfo();	
			$win = new COM('WinNT://'.$this -> computer.'/'.$usuario.',User');
			if($win -> Get('UserFlags') != 66113)
			{
				$win -> Put('UserFlags' , 66113);
				$win -> SetInfo();
			}

			return array( true , 'Usuario '.$usuario.' criado com sucesso e setado para nao expirar nunca <br/>');
		}

		catch (com_exception $e)
		{
			return array( false , $e->getMessage() );
		}
	}
	
	// addUserGroup() {{{
	/** 
	* Adiciona usuario no grupo especificado
	* 
	* Example:
	* <code>
	* require_once 'class.ServerAdminWin.php'
	* $AdminWin = new ServerAdminWin();
	* $retorno = $AdminWin -> addUserGroup(array(
	* 	'name' => 'diegotv',
	* 	'group' => 'streaming'
	* ));
	*
	* echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];
	*
	* </code>
	*
	* @param array ('name' => '' , 'group' => '' )
	*
	* @return array
	* @access public
	*/		
	public function addUserGroup( array $params=array() )
	{
		try
		{
			$Group = new COM('WinNT://'.$this -> computer.'/'.$params['group']);
			$Group -> Add('WinNT://'.$this -> computer.'/'.$params['name']);
			return array( true , 'Usuario adicionado ao grupo');
		}catch(com_exception $e)
		{
			return array( false , $e->getMessage() );
		}
	}
	// }}}
	
	// remUser() {{{
	/** 
	* Remove usuario do windows
	* 
	* Example:
	* <code>
	* require_once 'class.ServerAdminWin.php'
	* $Admin = new ServerAdminWin();
	* $retorno = $Admin -> remUser('diegotv');
	* echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];
	* </code>
	*
	* @param $usuario nome do usuario a ser excluido
	*
	* @return array
	* @access public
	*/
	public function remUser( $usuario = '')
	{
		if(strtolower($usuario) == 'administrador' || strtolower($usuario) == 'administrator')
		{
			return array(false , 'Nao permitido excluir usuario administrador!');
		}
		try
		{
			$users = $this -> win -> ExecQuery('SELECT * FROM Win32_UserAccount');	
			foreach($users as $user)
			{
				if($user -> Name == $usuario)
				{
					$winnt = new COM('WinNT://'.$this -> computer.',computer');
					$oUser = $winnt -> Delete('user', $usuario);
					return array( true , 'Usuario excluido com sucesso');
				}
			}
			return array(false , 'Usuario não encontrado');
		}catch(com_exception $e)
		{
			return array( false , $e->getMessage() );
		}		
	}
	// }}}
	
	// createFolder() {{{
	/** 
	* Cria Pasta no Windows
	* 
	* Example:
	* <code>
	* require_once 'class.ServerAdminWin.php'
	* $Admin = new ServerAdminWin();
	* $retorno = $Admin -> createFolder('C:\novaPasta');
	* echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];
	* </code>
	*
	* @param $ExplicitPath
	*
	* @return array
	* @access public
	*/
	public function createFolder($ExplicitPath = '')
	{
		try
		{
			$folder = new COM("Scripting.FileSystemObject");
			$objFolder = $folder -> CreateFolder($ExplicitPath);
			return array(true , 'Pasta criada no path: '.$ExplicitPath);
		}catch(com_exception $e)
		{
			return array( false , $e->getMessage());
		}
	}
	// }}}
		
	// remFolder() {{{
	/** 
	* Remove Pasta no Windows
	* 
	* Example:
	* <code>
	* require_once 'class.ServerAdminWin.php'
	* $Admin = new ServerAdminWin();
	* $retorno = $Admin -> remFolder('C:\novaPasta');
	* echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];
	* </code>
	*
	* @param $ExplicitPath
	*
	* @return array
	* @access public
	*/
	public function remFolder($ExplicitPath = '')
	{
		try
		{
			$folder = new COM("Scripting.FileSystemObject");
			$objFolder = $folder -> DeleteFolder($ExplicitPath);
			return array(true , 'Pasta removida no path: '.$ExplicitPath);
		}catch(com_exception $e)
		{
			return array( false ,$e->getMessage());
		}
	}
	// }}}
	
	// accessRootFolder() {{{
	/** 
	* Seta permissao total de usuario na pasta inforamada
	* 
	* Example:
	* <code>
	* require_once 'class.ServerAdminWin.php'
	* $Admin = new ServerAdminWin();
	* $retorno = $Admin -> accessRootFolder(array(
	* 	'name' => 'diegotv',
	* 	'path' => 'C:\novaPasta'
	* ));
	* echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];
	* </code>
	*
	* @param array ('name' => '' , 'path' => '' )
	*
	* @return array
	* @access public
	*/		
	public function accessRootFolder( array $params=array() )
	{
		if(exec("C:\\WINDOWS\\system32\\cacls.exe ".$params['path']." /T /E /G ".$params['name'].":F"))
		{
			return array( true , 'Permissoes setadas com sucesso!');
		}
		return array( false , $e->getMessage());
	}
	// }}}	
}

//$Admin = new ServerAdminWin();

//$retorno = $Admin -> addUser(array('name' => 'superteste2.streaming','pass' => '102030'));
/*
echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1]; echo '<br>';
$retorno = $Admin -> addUserGroup(array('name' => 'novaPasta','group' => 'streaming'));
echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1]; echo '<br>';
$retorno = $Admin -> createFolder('C:\novaPasta');
echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1]; echo '<br>';
$retorno = $Admin -> accessRootFolder( array('name' => 'novaPasta', 'path' => 'C:\novaPasta'));
echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1]; echo '<br>';*/


/*$retorno = $Admin -> remUser('novaPasta');
echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1]; echo '<br>';
$retorno = $Admin -> remFolder('C:\novaPasta');
echo ($retorno[0])? $retorno[1] : 'Erro: '.$retorno[1];*/
Return current item: Gerenciamento do windows por COM