miércoles, 13 de octubre de 2021

Scripts de automatizacion - Automation scripts

 En el siguiente blog se estaran subiendo scripts que ayudan a la automatizacion de procesos.

Comenzamos con PowerShell:

 Powershell

 Envio de texto y "enter" a una aplicacion:

En el siguiente ejemplo se automatiza el login para la aplicacion Skype enviando el usuario y pulsando enter para que el usuario posteriormente coloque su password:

#StartApp with passwd

function ValidateApp ($abrirApp) {
    ($process = Get-Process | where-object {$_.ProcessName -like "*Skype*"})
    #si process no tiene info
    if($process -eq $null)
    {
        echo "no hay procesos de Skype"
        $abrirApp=$true
        
    }
    else
    {
        echo "existen procesos de Skype"
        $abrirApp=$false

    }
    return $abrirApp
   
}

function StartApp {
 Start-Process -FilePath ‘C:\Program Files (x86)\Microsoft\Skype for Desktop\Skype.exe’ #-Wait #-PassThru
}

function SendKey {
 $p = Get-Process | Where-Object { $_.MainWindowTitle -eq "Skype" }
 if ($p)
{
    # get the window handle of the first application
    #$h = $p[0].MainWindowHandle
    # set the application to foreground
    #[void] [StartActivateProgramClass]::SetForegroundWindow($h)

    # send the keys sequence
    # more info on MSDN at http://msdn.microsoft.com/en-us/library/System.Windows.Forms.SendKeys(v=vs.100).aspx
    [System.Windows.Forms.SendKeys]::SendWait("Usuario")
    #esto es para enviar un "enter" y pasar a la siguiente pantalla
    $wshell = New-Object -ComObject wscript.shell;
    $wshell.AppActivate('Skype')
    Sleep 1
    $wshell.SendKeys('~')
}
}


function Proceso{

    $estado=ValidateApp ($estado)

    if ($estado -eq $true) {
        echo "no hay procesos skype"
        echo "se procede a iniciar app"
        StartApp
        Proceso
    }
    else{
        echo "hay procesos skype"
        echo "Pausa segs"
        Start-Sleep 20
        SendKey
        
    }

}


Proceso

 

Cierra de manera forzada

En el siguiente script se cierra de manera forzada una aplicacion. Como ejemplo cerramos la aplicacion Skype:


function detencion{

($process=get-process | Where-Object {$_.ProcessName -like "*Skype*"})
#$process

#si $process no tiene info entonces solo reporte que no habia proceso
if ($process -eq $null){
    echo "***" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt
    Get-Date -Format "dddd MM/dd/yyyy HH:mm:ss" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    echo "no hay procesos con el nombre *Skype* incluido" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    echo "***" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
}
#pero si process si tiene info entonces reporte cuales son los PID y cierra los procesos
else{
    echo "***" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt
    Get-Date -Format "dddd MM/dd/yyyy HH:mm:ss" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    echo "Listado de procesos en ejecucion con nombre *Skype*" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    #en esta proxima linea se puede usar el $process o get-process dado que deberia tener la misma informacion
    $process  #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    echo "Detencion forzada de proceso con nombre *Skype*" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    Stop-Process -Name "Skype" -Force
    #Espero 10 segundos
    Start-Sleep -Seconds 10
    "Posterior a la espera" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    echo "Listado de procesos en ejecucion con nombre *Skype*" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    #en proxima linea usar get-process, dado que $process mantiene su valor inicial
    Get-Process | Where-Object {$_.ProcessName -like "*Skype*"} #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    Get-Date -Format "dddd MM/dd/yyyy HH:mm:ss" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
    echo "***" #| Out-File -FilePath C:\Users\Administrator\Desktop\log2.txt -Append
}
#cierra funcion
}

detencion

 

Cerrar procesos de notepad que no tienen nombre (Untitled) enviando ALT+F4

 

* Esta entrada del blog se continuara actualizando conforme se realicen más automatizaciones


miércoles, 4 de septiembre de 2019

Python-Oriented Object Programming OOP Basic - Examples - Clases, Herencia, Polimorfismo



Codigo:


class Lobo():
    especie='salvaje'
    def __init__(self,nombre):
        self.nombre=nombre

    def sonido(self):
        print("Auuuu!!!")

miLobo=Lobo("Solitario")
miLobo.sonido()
print(miLobo.especie)

 Step by Step:


  1. Hemos utilizado la palabra "class" esta es una "keyword o reserved word" que sirve para crear una clase en esta caso llamado "Lobo".
  2. Tenemos un atributo de objeto de clase (class object attribute) "especie" inicializada como "salvaje" de manera manual en la clase. Esta sera la misma para cualquier instancia de la clase.
  3. Un metodo o funcion llamado __init__, el cual es un metodo magico que a su vez en python es el constructor, este inicializa los miembros de una clase
  4. El metodo constructor recibe por parametro un atributo llamado "nombre". Normalmente los atributos que tomamos como argumento los inicializamos usando self.nombredelatributo
  5. Observamos un metodo llamado "sonido"
  6. Inicializamos una variable de tipo objeto llamada "miLobo" enviando como parametro el nombre "Solitario"
  7. Invocamos el metodo "sonido" a partir del objeto "miLobo" 
  8. Hemos impreso el tipo de especie invocando el objeto y el atributo.
Resumen grafico:






Resultado de la ejecucion del codigo:


Auuuu!!!
salvaje


 Codigo:


class Lobo():
    especie='salvaje'
    def __init__(self,nombre):
        self.nombre=nombre

    def sonido(self):
        print("Auuuu!!!")

    def hablar(self):
        print("Mi nombre es %s"%self.nombre)

miLobo=Lobo("Solitario")
miLobo.sonido()
print(miLobo.especie)
miLobo.hablar()
  Step by Step:

Hemos incluído, el metodo hablar (el lobo dira su nombre), por lo tanto invocamos el metodo
y posteriormente imprime en pantalla su nombre.

Es importante que al imprimir debe detallarse "self.nombre" debido a que el parametro fue inicializado de en el constructor lo que lo vuelve un parametro de tipo objeto.


 Resultado de la ejecucion del codigo:


Auuuu!!!
salvaje
Mi nombre es Solitario





Codigo:

class AumentoSalario():
    aumento=2000
    def __init__(self,sactual=100):
        self.sactual=sactual

    def get_nuevosalario(self):
        return self.sactual + self.aumento

salarioActual=int(input("Digite salario actual: "))
nuevosalario=AumentoSalario(salarioActual)
print(nuevosalario.aumento)
print(nuevosalario.get_nuevosalario())

 Step by Step:

  1. Clase posee variable que sera simpre la misma llamada "aumento"
  2. Metodo constructor posee una variable inicializada en 10
  3. Metodo "get_nuevosalario" retorna el valor de la variable aumento + la variable "sactual"
Que pasa en el codigo que no es parte de la clase:

  1. Se solicita al usuario brindar un numero, este se almacena en variable llamada salarioActual
  2. Se instancia una variable de tipo objeto llamada "nuevoSalario", notese que como brindamos un parametro ("salarioActual") este ha sobrescrito el valor de la variable "sactual" en la clase.
  3. Se imprime la variable del aumento
  4. Se imprime el nuevo salario 

 Resultado de la ejecucion del codigo:

Digite salario actual: 3000
2000
5000 



Herencia:

class Animal:
    def __init__(self):
        print("Animal creado")

    def tipo(self):
        print("animal")

    def comer(self):
        print("Estoy comiendo")

class Lobo(Animal):
    def __init__(self):
        Animal.__init__(self)
        print("Lobo creado")

    def tipo(self):
        print("Soy un lobo")

myAnimal=Animal()
myAnimal.comer()
myAnimal.tipo()

miLobo=Lobo()
miLobo.comer()
miLobo.tipo()


 Explicacion:

Basicamente existe una clase Animal, con sus metodos llamados "tipo" y "comer". Sin embargo la clase es muy ambigua ya que existen varios tipos de animales, uno de ellos por ejemplo el lobo.

Si deseo crear un objeto llamado lobo, pensaria que es parte del objeto Animal. Por lo tanto podria heredar los metodos que ya tiene Animal para la creacion del objeto Lobo.

Entonces dentro de la clase Lobo, indico que es parte de la clase Animal, lo inicializo como tal y puedo acceder a los metodos de Animal. Si deseo sobrescribir o no utilizar algun metodo de Animal y que sea especifico para el lobo, recreo el metodo dentro de la clase Lobo con el nombre que ya poseia anteriormente el metodo en la clase Animal.

 Resultado de la ejecucion del codigo:


Animal creado
Estoy comiendo
animal
Animal creado
Lobo creado
Estoy comiendo
Soy un lobo




Polimorfismo:

class Casa:
    def get_valor(self):
        return 100    def comprar(self):
        print("Gracias por comprar casa")

class Carro:
    def get_valor(self):
        return 300    def comprar(self):
        print("Gracias por comprar carro")

#Funcion polimorfica --> no importa que objeto es, la funcion es aplicable

def comprar_bienes(objeto):
    if 200 > objeto.get_valor():
        objeto.comprar()

micasa=Casa()
comprar_bienes(micasa)

miCarro=Carro()
comprar_bienes(miCarro)
 Explicacion:

Tenemos 2 clases, "Casa" y "Carro", sin embargo una funcion que le es indiferente si el objeto es Casa o Carro, simplemente ejecutara el metodo respectivo, obviamente se espera que ese metodo se encuentre dentro del objeto que ha recibido por parametro.

 Resultado de la ejecucion del codigo:

 Gracias por comprar casa

 

 

 Otro ejemplo:

class Lobo():
    def __init__(self,name):
        self.name=name

    def sonido(self):
        return self.name + "...Auuuu!"
class Persona():
    def __init__(self,name):
        self.name=name

    def sonido(self):
        return self.name + "...Hola!"
def saludos(objeto):
    print(objeto.sonido())

miLobo=Lobo("Alfa")
miPersona=Persona("Lalo")

saludos(miLobo)
saludos(miPersona)

 Explicacion:

Existen 2 clases, "Lobo" y "Persona",  la funcion "Saludos" le es indiferente si el objeto que recibe por parametro es de tipo "Lobo" o  "Persona" , esta simplemente invoca el metodo sonido, la cual deberia estar en los objetos los cuales fueron enviados por parametro a la funcion saludos.

Resultado de la ejecucion del codigo:

Alfa...Auuuu!
Lalo...Hola!