TIPS: aprendiendo a usar las IA para generar scripts (tareas programas o automatizadas)
No necesitar conocer programación, sólo entender conceptos básicos:
-Por un lado, tienes "bucles de repetición" o "circunstancias": que MIENTRAS (WHILE) se esté cumpliendo una condición (p.ej. actualización pendiente), que se ejecute un proceso (cuando se termine o ya NO sea necesario, p.ej. con parches que ya están "reemplazados" por otros mejores)
-Por otros, de "duración" (FOR), que permiten que una tarea se realice "X" número de veces (p.ej. que haga limpieza cada día, 7 veces a la semana o 1 sola vez para desfragmentar, cada viernes, NO a la vez que esté limpiando y NO otro día)
-Por último, tienes el "UNTIL", es decir, algo está en marcha, HASTA que tú lo pares (antivirus, instalación de Windows -con matices, porque si está con un proceso en "instalación" puede suceder que termine al momento y luego tenga que repetirse completo o que primero lo haga y luego se apague)
Puedes pedirle esto concreto:
ERROR: te obliga a actualizarlo, si añades otros archivos que NO comiencen por el número 6
En su lugar, pídele esto: Plantéalo para que ejecute una tarea programada con todos los .EXE que estén en c:\updates, cada viernes a las 14:00h
De esta forma, TODOS los .EXE que añadas, serán aplicados/implementados, es más sencillo y puedes solicitar que se haga un día y a una hora concreta, NO cuando el usuario pueda estar usando programas.
De esta forma, puedes encontrarte códigos como este:
# C:\Updates\Install-Updates.ps1
# Ejecuta todos los .EXE de C:\Updates en modo silencioso y guarda log
$UpdatesPath = "C:\Updates"
$LogDir = "C:\Updates\Logs"
New-Item -Path $LogDir -ItemType Directory -Force | Out-Null
$LogFile = Join-Path $LogDir ("install_{0:yyyyMMdd_HHmmss}.log" -f (Get-Date))
"=== Inicio: $(Get-Date) ===" | Out-File -FilePath $LogFile -Encoding UTF8
$exes = Get-ChildItem -Path $UpdatesPath -Filter *.exe -File | Sort-Object Name
if (-not $exes -or $exes.Count -eq 0) {
"No se encontraron .exe en $UpdatesPath" | Out-File $LogFile -Append -Encoding UTF8
exit 0
}
foreach ($exe in $exes) {
"Instalando: $($exe.FullName)" | Out-File $LogFile -Append -Encoding UTF8
try {
# Argumentos típicos silenciosos. Si tus EXE usan otros ("/S", "/silent", etc.), te lo adapto.
$args = "/quiet /norestart"
$p = Start-Process -FilePath $exe.FullName -ArgumentList $args -Wait -PassThru -WindowStyle Hidden
"ExitCode: $($p.ExitCode)" | Out-File $LogFile -Append -Encoding UTF8
}
catch {
"ERROR: $($_.Exception.Message)" | Out-File $LogFile -Append -Encoding UTF8
}
}
"=== Fin: $(Get-Date) ===" | Out-File -FilePath $LogFile -Append -Encoding UTF8
exit 0
Puedes pedirle que te explique, paso a paso, qué está haciendo, para obtener algo como esto:
Explícame, con todo lujo de detalles, pero con palabras sencillas, qué haría este código: # C:\Updates\Install-Updates.ps1
# Ejecuta todos los .EXE de C:\Updates en modo silencioso y guarda log
$UpdatesPath = "C:\Updates"
$LogDir = "C:\Updates\Logs"
New-Item -Path $LogDir -ItemType Directory -Force | Out-Null
$LogFile = Join-Path $LogDir ("install_{0:yyyyMMdd_HHmmss}.log" -f (Get-Date))
"=== Inicio: $(Get-Date) ===" | Out-File -FilePath $LogFile -Encoding UTF8
$exes = Get-ChildItem -Path $UpdatesPath -Filter *.exe -File | Sort-Object Name
if (-not $exes -or $exes.Count -eq 0) {
"No se encontraron .exe en $UpdatesPath" | Out-File $LogFile -Append -Encoding UTF8
exit 0
}
foreach ($exe in $exes) {
"Instalando: $($exe.FullName)" | Out-File $LogFile -Append -Encoding UTF8
try {
# Argumentos típicos silenciosos. Si tus EXE usan otros ("/S", "/silent", etc.), te lo adapto.
$args = "/quiet /norestart"
$p = Start-Process -FilePath $exe.FullName -ArgumentList $args -Wait -PassThru -WindowStyle Hidden
"ExitCode: $($p.ExitCode)" | Out-File $LogFile -Append -Encoding UTF8
}
catch {
"ERROR: $($_.Exception.Message)" | Out-File $LogFile -Append -Encoding UTF8
}
}
"=== Fin: $(Get-Date) ===" | Out-File -FilePath $LogFile -Append -Encoding UTF8
exit 0
Comentarios
Publicar un comentario