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