Contenidos
Enunciado 1
Descripción: Crea un script de PowerShell que muestre una lista de todos los procesos en ejecución en el sistema, ordenados por uso de memoria en orden descendente.
Solución:
# Obtener todos los procesos y ordenarlos por uso de memoria en orden descendente
Get-Process | Sort-Object -Property WS -Descending
Enunciado 2
Descripción: Escribe un script de PowerShell que acepte un nombre de archivo como parámetro y muestre el número de líneas, palabras y caracteres en el archivo.
Solución:
param (
[string]$filePath
)
# Verificar si el archivo existe
if (Test-Path $filePath) {
# Leer el contenido del archivo
$content = Get-Content $filePath
# Contar el número de líneas
$lineCount = $content.Count
# Contar el número de palabras
$wordCount = ($content -join " " -split "\s+").Count
# Contar el número de caracteres
$charCount = ($content -join "").Length
# Mostrar los resultados
Write-Output "Líneas: $lineCount"
Write-Output "Palabras: $wordCount"
Write-Output "Caracteres: $charCount"
} else {
Write-Output "El archivo no existe."
}
Enunciado 3
Descripción: Escribe un script de PowerShell que busque archivos en un directorio específico (y sus subdirectorios) que no hayan sido modificados en los últimos 30 días y los mueva a una carpeta de respaldo.
Solución:
param (
[string]$sourceDir,
[string]$backupDir
)
# Verificar si los directorios existen
if (-Not (Test-Path $sourceDir)) {
Write-Output "El directorio de origen no existe."
exit
}
if (-Not (Test-Path $backupDir)) {
# Crear el directorio de respaldo si no existe
New-Item -ItemType Directory -Path $backupDir
}
# Obtener la fecha límite (hace 30 días)
$limitDate = (Get-Date).AddDays(-30)
# Buscar archivos no modificados en los últimos 30 días
$files = Get-ChildItem -Path $sourceDir -Recurse | Where-Object { $_.LastWriteTime -lt $limitDate }
# Mover los archivos a la carpeta de respaldo
foreach ($file in $files) {
$destPath = Join-Path $backupDir $file.Name
Move-Item -Path $file.FullName -Destination $destPath
}
Enunciado 4
Descripción: Crea un script de PowerShell que verifique si un servicio específico está en ejecución, y si no lo está, intente iniciarlo. Si el servicio no existe, debe mostrar un mensaje apropiado.
Solución:
param (
[string]$serviceName
)
# Obtener el estado del servicio
$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
if ($null -eq $service) {
Write-Output "El servicio '$serviceName' no existe."
} elseif ($service.Status -ne 'Running') {
# Intentar iniciar el servicio
Start-Service -Name $serviceName
Write-Output "El servicio '$serviceName' se ha iniciado."
} else {
Write-Output "El servicio '$serviceName' ya está en ejecución."
}
Enunciado 5
Descripción: Escribe un script de PowerShell que genere un informe HTML con una lista de todos los usuarios locales del sistema, incluyendo su nombre completo y la fecha del último inicio de sesión.
Solución:
# Obtener todos los usuarios locales
$users = Get-LocalUser
# Crear una lista para almacenar la información del informe
$userInfo = @()
foreach ($user in $users) {
$userInfo += [PSCustomObject]@{
'Nombre de Usuario' = $user.Name
'Nombre Completo' = $user.FullName
'Último Inicio de Sesión' = $user.LastLogon
}
}
# Convertir la lista a HTML
$userInfo | ConvertTo-Html -Property 'Nombre de Usuario', 'Nombre Completo', 'Último Inicio de Sesión' -Title 'Informe de Usuarios Locales' -PreContent "Informe de Usuarios Locales
" | Out-File 'InformeUsuarios.html'
Write-Output "Informe generado: InformeUsuarios.html"

