Escribir la salida en archivos de registro en el script de PowerShell
Puede usar archivos de registro de texto simples para controlar la ejecución y realizar un seguimiento de todas las actividades en sus scripts de PowerShell. Esto es útil cuando se depuran errores o se auditan acciones de secuencias de comandos. En este artículo, mostraremos algunas formas de usar el inicio de sesión en scripts de PowerShell escribiendo la salida en archivos de registro de texto.
En el caso más simple, si desea escribir la salida de un mensaje de información o el resultado de un comando de PowerShell en un archivo de registro de texto, puede usar uno de los siguientes formatos para redirigir la salida de PS a un archivo de texto:
Write-Output "Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog.txt
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:computername"
"Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt -AppendEn todos los casos, los comandos agregan una nueva línea a un archivo txt con el texto que ha especificado.
Si desea sobrescribir el contenido del archivo de registro cada vez, utilice el
Set-Contentcmdlet.
El principal inconveniente de este método es que no puede averiguar cuándo se escribió una entrada en el registro (ocurrió un evento). Puede agregar la marca de tiempo actual al archivo de registro. Ayudará a identificar el momento en que se ejecutó el script y ocurrió un evento específico.
Para hacerlo más conveniente, puede crear una función separada en su secuencia de comandos de PowerShell que escribirá los datos que recibe en un archivo de registro y agregará la marca de tiempo para cada evento.
Puede crear una función como se muestra a continuación:
$Logfile = "C:\PS\Logs\proc_$env:computername.log"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}Luego llame a la función WriteLog si desea registrar algo.
WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"Ahora puede ver la hora de cada entrada en el archivo de registro.
Puedes reemplazar
Write-Hostllamadas con
LogWriteen su guión.
PowerShell tiene una función de transcripción incorporada para guardar todos los comandos y resultados que se muestran en la consola PS en un archivo de registro de texto.
Para registrar su sesión actual de PowerShell, se usa el cmdlet Start-Transcript.
Después de ejecutar el comando, aparece un mensaje que muestra el archivo en el que se registra la salida de todos los comandos. De forma predeterminada, el archivo de registro se encuentra en el perfil de usuario actual:
Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txtPuede especificar la ruta al archivo de texto de la siguiente manera:
Start-Transcript -Append C:\PS\Logs\PSScriptLog.txtLa opción -Anexar indica que las nuevas sesiones se registrarán al final del archivo (sin sobrescribirlo).
Ejecute algunos comandos de PowerShell que envían los resultados a la consola. Por ejemplo, mostremos una lista de procesos en ejecución, servicios y el estado de replicación de AD:
Get-Process| where-object {$_.WorkingSet -GT 500000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" -Descending
Get-Service | Where-Object {$_.status -eq 'Running'}
Get-ADReplicationFailure -Target mun-dc01Deje de iniciar sesión para la sesión actual de PowerShell:
Stop-TranscriptLuego abra el archivo de registro de la transcripción.
Como puede ver, el registro muestra el historial completo de los comandos de PowerShell que se ejecutaron en la consola y toda la salida.
Todos los errores y advertencias también se registran, y es extremadamente conveniente al depurar scripts complejos de PowerShell.
Puedes usar
Start-Transcripty
Stop-Transcriptcmdlets en sus scripts de PowerShell para registrar de forma nativa todas las acciones y resultados.
Con la opción de directiva de grupo Activar transcripción de PowerShell (Configuración de la computadora -> Plantillas administrativas -> Componentes de Windows -> Windows PowerShell), puede habilitar el registro automático de todos los comandos y resultados de PowerShell ejecutados en una computadora. Después de actualizar la configuración de GPO en la computadora, se creará un archivo de registro de texto separado para cada proceso de powershell.exe en ejecución y se registrarán todos los comandos de PS y sus resultados.



