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