Ejercicios de PowerShell#
Crea un script llamado disk.ps1 que imprima por pantalla el porcentaje que esta ocupada la partición C:
# disk.ps1
# Obtener la información de la partición C:
$disk = Get-PSDrive -Name C
# Calcular el porcentaje de espacio usado
$porcentaje = ($disk.Used / ($disk.Used + $disk.Free)) * 100
# Mostrar el porcentaje de espacio usado
Write-Output ("C: ocapada al {0:N2}%" -f $porcentaje)
Crea un script llamado mem.ps1, obtiene solamente la memoria en MB ocupada y se escriban en un archivo llamado free.log cada vez que se ejecute, sin borrar el anterior registro.
# mem.ps1
# Obtener la memoria física total y la memoria libre
$totalMemory = (Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1MB
$freeMemory = (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory / 1MB
# Calcular la memoria ocupada
$usedMemory = $totalMemory - $freeMemory
# Obtener la fecha y hora actual para el registro
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# Crear el mensaje que se va a escribir en el archivo
$logEntry = "$timestamp - Memoria ocupada: $([math]::round($usedMemory, 2)) MB"
# Escribir la entrada en el archivo free.log, sin borrar el contenido anterior
Add-Content -Path "free.log" -Value $logEntry
Crea un script llamado cpu.ps1 que saque por pantalla el nombre del procesador instalado en el equipo
# cpu.ps1
# Obtener el nombre del procesador
$cpuName = Get-CimInstance -ClassName Win32_Processor | Select-Object -ExpandProperty Name
# Mostrar el nombre del procesador en la pantalla
Write-Host "CPU: $cpuName"
Crea un script llamado mac.ps1 que obtiene la MAC de las tarjetas de red que estén en estado Up
# mac.ps1
Get-NetAdapter | Where-Object { $_.Status -eq 'Up'} | Format-Table Name,MacAddress
# mac.ps1
# Obtener todos los adaptadores de red en el sistema
$networkAdapters = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' }
# Iterar sobre cada adaptador para obtener la dirección MAC
foreach ($adapter in $networkAdapters) {
$macAddress = $adapter.MacAddress
$adapterName = $adapter.Name
Write-Host "Adaptador: $adapterName"
Write-Host "MAC: $macAddress"
Write-Host "---------------------------"
}
Haz un script llamado edad.ps1 que te pregunte en que año naciste y te diga la edad que tienes
# Script: edad.ps1
# Solicitar al usuario que ingrese su año de nacimiento
$añoNacimiento = Read-Host "Ingrese el año en que naciste"
# Obtener el año actual
$añoActual = (Get-Date).Year
# Calcular la edad
$edad = $añoActual - $añoNacimiento
# Mostrar la edad
Write-Output "Tienes $edad años."
Haz un script llamado tres_numeros.ps1 que te pregunte al usuario tres numero enteros y devuelva la suma:
echo "Dame un número"
[int] $x=Read-Host
echo "Dame un número"
[int] $y=Read-Host
echo "Dame un número"
[int] $z=Read-Host
$r=$x+$y+$z
echo $r
echo "Dame un número"
[Double] $x=Read-Host
echo "Dame un número"
[Double] $y=Read-Host
echo "Dame un número"
[Double]$z=Read-Host
$r=$x+$y+$z
echo $("{0:F2}" -f $r)
Haz un script llamado mult.ps1 que pide un número al usuario y muestre su tabla de multiplicar
# mult.ps1
$number = Read-Host "Introduce un número para mostrar su tabla de multiplicar"
$n = [int] $number
Write-Host "Tabla de multiplicar de $n"
Write-Host "--------------------------"
for ($i = 1; $i -le 10; $i++) {
$r = $n * $i
Write-Host "$n x $i = $r"
}
Crea una carpeta llamada Ejercicio, dentro ejecuta lo siguiente:
mkdir Ejercicio
cd .\Ejercicio\
for ($i=0;$i -lt 10;$i++){
echo archivo $i > archivo_$i.dat
}
Si hacemos (C:Users….Ejercicio ls) veremos que se han creado 10 archivos. Puedes también recorrerlos de la siguiente forma:
foreach ($i In $(Get-ChildItem -Filter *.dat )){
echo "i = $i"
}
Haz un script llamado ext.ps1 que cambie a todos los archivos la extensión .dat por .txt
# ext.ps1
foreach ($i In $(Get-ChildItem -Filter *.dat )){
$newName = $i.Name -replace '\.dat$', '.txt'
Rename-Item $i.Name $newName
}
Haz un script llamado puerta.ps1, que permite al usuario seleccionar entre cuatro puertas de diferentes colores (roja, azul, verde y amarilla). Si el usuario ingresa un código diferente de 1 a 4, se mostrará un mensaje indicando que la puerta es incorrecta.
# Script: puerta_if.ps1
$codigo = Read-Host "
1 - puerta roja
2 - puerta azul
3 - puerta verde
4 - puerta amarilla
Seleccione una puerta"
if ($codigo -eq 1) {
Write-Output "Has seleccionado la puerta roja."
}
elseif ($codigo -eq 2) {
Write-Output "Has seleccionado la puerta azul."
}
elseif ($codigo -eq 3) {
Write-Output "Has seleccionado la puerta verde."
}
elseif ($codigo -eq 4) {
Write-Output "Has seleccionado la puerta amarilla."
}
else {
Write-Output "Puerta incorrecta."
}
# Script: puerta.ps1
$codigo = Read-Host "
1 - puerta roja
2 - puerta azul
3 - puerta verde
4 - puerta amarilla
Seleccione una puerta"
switch ($codigo) {
1 { Write-Output "Has seleccionado la puerta roja." }
2 { Write-Output "Has seleccionado la puerta azul." }
3 { Write-Output "Has seleccionado la puerta verde." }
4 { Write-Output "Has seleccionado la puerta amarilla." }
Default { Write-Output "Puerta incorrecta." }
}
Haz un script llamado puerta2.ps1 parecido al anterior, en este caso si el usuario selecciona una puerta que no sea la verde, se muestra un mensaje indicando que ha perdido. Si selecciona la puerta verde, se le permite lanzar una moneda para ver si gana o pierde.
# Script: puerta.ps1
# Solicitar al usuario que seleccione una puerta ingresando un número del 1 al 4
$codigo = Read-Host "Seleccione una puerta (1 - puerta roja, 2 - puerta azul, 3 - puerta verde, 4 - puerta amarilla)"
# Usar switch para seleccionar la puerta según el código ingresado
switch ($codigo) {
1 { Write-Output "Has seleccionado la puerta roja. Has perdido." }
2 { Write-Output "Has seleccionado la puerta azul. Has perdido." }
3 {
Write-Output "Has seleccionado la puerta verde."
# Solicitar al usuario que seleccione entre cara (0) o cruz (1)
$moneda = Read-Host "Lanza la moneda: selecciona cara (0) o cruz (1)"
# Verificar el resultado de la moneda
if ($moneda -eq "1") {
Write-Output "Has ganado."
} else {
Write-Output "Has perdido."
}
}
4 { Write-Output "Has seleccionado la puerta amarilla. Has perdido." }
Default { Write-Output "Puerta incorrecta." }
}
Haz un script llamado usuario.ps1 que reciba los siguientes parámetros:
usuario.ps1 -Nombre Mario -Apellido López -Usuario mario33 -Nacimiento 200
El script debe:
- Calcular la edad del usuario.
- Si el usuario tiene 14 años o más:
Mostrar el mensaje: Se ha creado a [Nombre] [Apellido] el usuario [Usuario]
- Si el usuario tiene menos de 14 años:
Mostrar el mensaje: No se puede crear el usuario [Usuario] a [Nombre] [Apellido] por tener menos de 14
$Nombre = $args[1]
$Apellido = $args[3]
$Usuario = $args[5]
$Nacimiento = [int]$args[7]
$AñoActual = (Get-Date).Year
$Edad = $AñoActual - $Nacimiento
if ($Edad -ge 14) {
Write-Output "Se ha creado a $Nombre $Apellido el usuario $Usuario"
} else {
Write-Output "No se puede crear el usuario $Usuario a $Nombre $Apellido por tener menos de 14"
}
$Nombre = "Nombre"
$Apellido = "Apellido"
$Usuario = "usuario"
$Nacimiento = (Get-Date).Year
for($i=0;$i -lt $args.Length;$i++){
if ( $args[$i] -eq '-Nombre'){
$Nombre = $args[$($i+1)]
}
if ( $args[$i] -eq '-Apellido'){
$Apellido = $args[$($i+1)]
}
if ( $args[$i] -eq '-Usuario'){
$Usuario = $args[$($i+1)]
}
if ( $args[$i] -eq '-Nacimiento'){
$Nacimiento = $args[$($i+1)]
}
}
$AñoActual = (Get-Date).Year
$Edad = $AñoActual - $Nacimiento
if ($Edad -ge 14) {
Write-Output "Se ha creado a $Nombre $Apellido el usuario $Usuario"
} else {
Write-Output "No se puede crear el usuario $Usuario a $Nombre $Apellido por tener menos de 14"
}
param (
# en el caso de que no se lo proporcionemos nos dará estos valores por defecto
[string]$Nombre = "Nombre",
[string]$Apellido = "Apellido",
[string]$Usuario = "usuario",
[int]$Nacimiento = (Get-Date).Year
)
$AñoActual = (Get-Date).Year
$Edad = $AñoActual - $Nacimiento
if ($Edad -ge 14) {
Write-Output "Se ha creado a $Nombre $Apellido el usuario $Usuario"
} else {
Write-Output "No se puede crear el usuario $Usuario a $Nombre $Apellido por tener menos de 14"
}
Haz un script llamado monedas.ps1 que simule el lanzamiento de 3 monedas y calcule la probabilidad de obtener 3 caras
$numero_tiradas=1000
$tres_caras=0
for ($i=0;$i -lt $numero_tiradas;$i++){
$m1=$(Get-Random -Minimum 0 -Maximum 2)
$m2=$(Get-Random -Minimum 0 -Maximum 2)
$m3=$(Get-Random -Minimum 0 -Maximum 2)
if (($m1 -eq 0) -and ($m2 -eq 0) -and ($m3 -eq 0)){
$tres_caras++
}
}
echo "La probabilidad es ($($tres_caras/$numero_tiradas))"
$numero_tiradas=1000
$tres_caras=0
$N_monedas=3
$m = @(0)*$N_monedas
for ($j=0; $j -lt $numero_tiradas; $j++){
for ($i=0;$i -lt $N_monedas;$i++){
$m[$i]=$(Get-Random -Minimum 0 -Maximum 2)
}
$todas_cara=$true
for ($i=0;$i -lt $N_monedas;$i++){
if($m[$i] -eq 1) {
$todas_cara=$false
}
}
if ($todas_cara){
$tres_caras++
}
}
echo "La probabilidad es ($($tres_caras/$numero_tiradas))"
Haz un script llamado rnd.ps1 que escoja un numero aleatorio entre 1 y 20, pregunte al usuario, le diga si es más pequeño o más grande y que continué hasta que acierte. Cuando el usuario acierte haz que muestre el número de intentos.
# rnd.ps1
# Generar un número aleatorio entre 1 y 20
$NumeroAleatorio = Get-Random -Minimum 1 -Maximum 21
# Inicializar el contador de intentos
$contador = 0
Write-Output "He generado un número entre 1 y 20. ¡Intenta adivinarlo!"
# Inicializar la respuesta fuera del rango válido para entrar al bucle
[int] $respuesta = -1
while ($respuesta -ne $NumeroAleatorio) {
[int] $respuesta = Read-Host "Introduce tu suposición"
$contador++
if ($respuesta -lt $NumeroAleatorio) {
Write-Output "El número es mayor que $respuesta. Intenta de nuevo."
}
if ($respuesta -gt $NumeroAleatorio) {
Write-Output "El número es menor que $respuesta. Intenta de nuevo."
}
if ($respuesta -eq $NumeroAleatorio) {
Write-Output "¡Felicidades! Has adivinado el número."
Write-Output "Número de intentos: $contador"
}
}
# rnd_do_while.ps1
# Generar un número aleatorio entre 1 y 20
$NumeroAleatorio = Get-Random -Minimum 1 -Maximum 21
# Inicializar el contador de intentos
$contador = 0
Write-Output "He generado un número entre 1 y 20. ¡Intenta adivinarlo!"
do {
[int] $respuesta = Read-Host "Introduce tu suposición"
$contador++
if ($respuesta -lt $NumeroAleatorio) {
Write-Output "El número es mayor que $respuesta. Intenta de nuevo."
}
if ($respuesta -gt $NumeroAleatorio) {
Write-Output "El número es menor que $respuesta. Intenta de nuevo."
}
if ($respuesta -eq $NumeroAleatorio) {
Write-Output "¡Felicidades! Has adivinado el número."
Write-Output "Número de intentos: $contador"
}
} while ($respuesta -ne $NumeroAleatorio)
# rnd_do_until.ps1
# Generar un número aleatorio entre 1 y 20
$NumeroAleatorio = Get-Random -Minimum 1 -Maximum 21
# Inicializar el contador de intentos
$contador = 0
Write-Output "He generado un número entre 1 y 20. ¡Intenta adivinarlo!"
do {
[int] $respuesta = Read-Host "Introduce tu suposición"
$contador++
if ($respuesta -lt $NumeroAleatorio) {
Write-Output "El número es mayor que $respuesta. Intenta de nuevo."
}
if ($respuesta -gt $NumeroAleatorio) {
Write-Output "El número es menor que $respuesta. Intenta de nuevo."
}
if ($respuesta -eq $NumeroAleatorio) {
Write-Output "¡Felicidades! Has adivinado el número."
Write-Output "Número de intentos: $contador"
}
} until ($respuesta -eq $NumeroAleatorio)
Haz un script llamado dados.ps1 que obtenga dos números aleatorios entre el 1 y el 6, haz que la salida se vuelque en un archivo llamado tiradas.csv, en tres columnas, siendo la tercera columna la suma de los dos dados, crea un archivo con al menos 100 tiradas.
Haz que el número de tiradas lo reciba como un argumento, por ejemplo:
.\dados.ps1 100
En el caso de que no reciba ningún argumento haz que pregunte cuantas tiradas quieres.
.\dados.ps1
¿Cuántas tiradas quieres hacer?
100
En el caso de que reciba el argumento help, muestre la siguiente ayuda:
.\dados.ps1 help
Uso del script dados.ps1:
.\dados.ps1 <número_de_tiradas>
Ejemplo: .\dados.ps1 100
Si no se proporciona ningún argumento, se preguntará cuántas tiradas deseas hacer.
Si se usa el argumento 'help', se mostrará esta ayuda.
# dados.ps1
function Tirar_dados($Tiradas){
"dado1,dado2,suma" > tiradas.csv
for ($i = 1; $i -le $Tiradas; $i++) {
$dado1 = Get-Random -Minimum 1 -Maximum 7
$dado2 = Get-Random -Minimum 1 -Maximum 7
$suma = $dado1 + $dado2
"$dado1,$dado2,$suma" >> tiradas.csv
}
Write-Output "$Tiradas tiradas generadas y guardadas en tiradas.csv"
}
function Show-Help {
Write-Output "Uso del script dados.ps1:"
Write-Output ".\dados.ps1 <número_de_tiradas>"
Write-Output "Ejemplo: .\dados.ps1 100"
Write-Output "Si no se proporciona ningún argumento, se preguntará cuántas tiradas deseas hacer."
Write-Output "Si se usa el argumento 'help', se mostrará esta ayuda."
}
[int] $Tiradas = 0
if ($args.Length -eq 0) {
$Tiradas = Read-Host "¿Cuántas tiradas quieres hacer?"
Tirar_dados($Tiradas)
}elseif ($args[0] -eq "help"){
Show-Help
}else{
$Tiradas = [int] $args[0]
Tirar_dados($Tiradas)
}
# dados.ps1
param (
[string] $Tiradas
)
function Tirar_dados([int] $Tiradas){
"dado1,dado2,suma" > tiradas.csv
for ($i = 1; $i -le $Tiradas; $i++) {
$dado1 = Get-Random -Minimum 1 -Maximum 7
$dado2 = Get-Random -Minimum 1 -Maximum 7
$suma = $dado1 + $dado2
"$dado1,$dado2,$suma" >> tiradas.csv
}
Write-Output "$Tiradas tiradas generadas y guardadas en tiradas.csv"
}
function Show-Help {
Write-Output "Uso del script dados.ps1:"
Write-Output ".\dados.ps1 <número_de_tiradas>"
Write-Output "Ejemplo: .\dados.ps1 100"
Write-Output "Si no se proporciona ningún argumento, se preguntará cuántas tiradas deseas hacer."
Write-Output "Si se usa el argumento 'help', se mostrará esta ayuda."
}
if (-not $Tiradas) {
$Tiradas = Read-Host "¿Cuántas tiradas quieres hacer?"
Tirar_dados($Tiradas)
}elseif ($Tiradas -eq "help"){
Show-Help
}else{
Tirar_dados($Tiradas)
}
Lee el archivo que has generado en el ejercicio anterior y haz que salga por pantalla el numero de tiradas y el porcentaje de veces que sale cada una, por ejemplo
$ ./analisis.ps1
De 1000 tiradas : 2(1%) 3(7%) 4(10%) 5(12%) 6(14%) 7(17%) 8(14%) 9(12%) 10(10%) 11(7%) 12(1%)
# analisis.ps1
$A = Import-Csv -Path tiradas.csv
$total=$A.Count
echo "leemos $total tiradas"
$s2=0
$s3=0
$s4=0
$s5=0
$s6=0
$s7=0
$s8=0
$s9=0
$s10=0
$s11=0
$s12=0
foreach ($i in $A.Suma){
if ($i -eq 2) {$s2++}
if ($i -eq 3) {$s3++}
if ($i -eq 4) {$s4++}
if ($i -eq 5) {$s5++}
if ($i -eq 6) {$s6++}
if ($i -eq 7) {$s7++}
if ($i -eq 8) {$s8++}
if ($i -eq 9) {$s9++}
if ($i -eq 10) {$s10++}
if ($i -eq 11) {$s11++}
if ($i -eq 12) {$s12++}
}
$salida="2 ($([math]::Round(($s2 / $total) * 100, 0))%), "
$salida+="3 ($([math]::Round(($s3 / $total) * 100, 0))%), "
$salida+="4 ($([math]::Round(($s4 / $total) * 100, 0))%), "
$salida+="5 ($([math]::Round(($s5 / $total) * 100, 0))%), "
$salida+="6 ($([math]::Round(($s6 / $total) * 100, 0))%), "
$salida+="7 ($([math]::Round(($s7 / $total) * 100, 0))%), "
$salida+="8 ($([math]::Round(($s8 / $total) * 100, 0))%), "
$salida+="9 ($([math]::Round(($s9 / $total) * 100, 0))%), "
$salida+="10 ($([math]::Round(($s10 / $total) * 100, 0))%), "
$salida+="11 ($([math]::Round(($s11 / $total) * 100, 0))%), "
$salida+="12 ($([math]::Round(($s12 / $total) * 100, 0))%)"
echo $salida
# analisis.ps1
$A = Import-Csv -Path tiradas.csv
$total=$A.Count
echo "leemos $total tiradas"
#inicializamos la matriz con 13 elementos
$s = @(0)*13
for ($i=2;$i -lt 13;$i++){
$s[$i]=0
}
foreach ($i in $A.Suma){
$s[$i]++
}
$salida=""
for ($i=2;$i -lt 13;$i++){
$salida+="$i ($([math]::Round(($s[$i] / $total) * 100, 0))%)"
if($i -lt 12) {
$salida+=", "
}
}
echo $salida
Un jugador comienza con 100 € para jugar en una máquina tragamonedas. El funcionamiento de la máquina es el siguiente:
Cada partida cuesta 1 €.
La máquina tiene 3 rulos.
$rulos = @('limon', 'manzana', 'platano', 'siete')
Tres frutas iguales (por ejemplo, 3 limones): el jugador gana 1 €.
Tres sietes: el jugador gana 100 €.
Si el jugador no tiene suficiente dinero para jugar (menos de 1 €), deja de jugar.
Simula la evolución del dinero del jugador durante 1000 partidas o hasta que su dinero se agote, lo que ocurra primero.
El objetivo es determinar cuánto dinero tiene el jugador al final de las 1000 partidas y cuántas partidas logró jugar en total.
$rulos = @('limon', 'manzana', 'platano', 'siete')
$numero_tiradas=1000
function Girar-Rulos {
$ganacia = -1
$rulo1=$rulos[(Get-Random -Minimum 0 -Maximum $rulos.Length)]
$rulo2=$rulos[(Get-Random -Minimum 0 -Maximum $rulos.Length)]
$rulo3=$rulos[(Get-Random -Minimum 0 -Maximum $rulos.Length)]
if( ($rulo1 -eq $rulo2) -and ($rulo1 -eq $rulo3) ){
$ganacia+=1
if($rulo1 -eq "siete"){
$ganacia+=99
}
}
#Write-Output "$rulo1,$rulo2,$rulo3"
return $ganacia
}
$jugador=10
for ($j=0; $j -lt $numero_tiradas; $j++){
$jugador+=Girar-Rulos
Write-Output $jugador
if ($jugador -lt 0){
Write-Output "se arruina con $j tiradas "
#exit
$j=$numero_tiradas
}
}
Crea un script en PowerShell llamado csv.ps1 que cumpla con las siguientes características:
csv.ps1 -usuario [nombre usuario] -grupo [grupo]
El script debe agregar una entrada al archivo usuarios.csv (si no existe, debe crearlo). El archivo usuarios.csv tendrá el siguiente formato:
usuario,grupo,password
alice,B,12D7087D61
bob,A,5CD356CE5
La contraseña debe generarse de forma aleatoria, haz que sea una cadena alfanumérica de 8 caracteres.
Al ejecutar el script, debe mostrar un mensaje en la terminal indicando que el usuario ha sido creado. El mensaje debe seguir el formato:
El usuario [usuario] ha sido creado con la password [password] en el grupo [grupo].
En el caso de que el usuario exista, la salida será :
El usuario [usuario] ya existe, no se puede crear.
param (
#[Parameter(Mandatory = $true)] en el caso de que ingreses usuario, te lo pregunta
[string]$usuario,
[string]$grupo="A"
)
$archivoCSV = "usuarios.csv"
if(! $usuario){ #caso de no recibir nombre de usuario se para
echo "no me han dado usuario"
exit
}
function GenerarPassword {
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#~$%&"
$salida=""
for ($i=0;$i -lt 8;$i++){
$r = Get-Random -Minimum 0 -Maximum $chars.Length
$salida+=$chars[$r]
}
Write-Output $salida
}
# Si no existe crear el encabezado
if (!(Test-Path $archivoCSV)) {
Write-Output "usuario,grupo,password" > $archivoCSV
}
# Si el usuario ya existe
$usuariosExistentes = Import-Csv -Path $archivoCSV
if ($usuariosExistentes | Where-Object { $_.usuario -eq $usuario })
{
Write-Output "El usuario $usuario ya existe, no se puede crear."
}else{
$password = GenerarPassword
Write-Output "$usuario,$grupo,$password" >> $archivoCSV
Write-Output "El usuario $usuario ha sido creado con la password $password en el grupo $grupo."
}
En el caso de que pongamos -delete borrara el usuario del archvio csv
csv.ps1 -usuario [nombre usuario] -delete
El usuario [usuario] ha sido borrado
param (
#[Parameter(Mandatory = $true)] en el caso de que ingreses usuario, te lo pregunta
[string]$usuario,
[string]$grupo="A",
[switch]$delete
)
$archivoCSV = "usuarios.csv"
if(! $usuario){ #caso de no recibir nombre de usuario se para
echo "no me han dado usuario"
exit
}
function GenerarPassword {
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#~$%&"
$salida=""
for ($i=0;$i -lt 8;$i++){
$r = Get-Random -Minimum 0 -Maximum $chars.Length
$salida+=$chars[$r]
}
Write-Output $salida
}
# Si no existe crear el encabezado
if (!(Test-Path $archivoCSV)) {
Write-Output "usuario,grupo,password" > $archivoCSV
}
# Si el usuario ya existe
$usuariosExistentes = Import-Csv -Path $archivoCSV
if ($delete){
if ($usuariosExistentes | Where-Object { $_.usuario -eq $usuario }) {
$usuariosActualizados = $usuariosExistentes | Where-Object { $_.usuario -ne $usuario }
#-NoTypeInformationdeja un archivo más limpio
$usuariosActualizados | Export-Csv -Path $archivoCSV -NoTypeInformation
Write-Output "El usuario $usuario ha sido eliminado del archivo."
} else {
Write-Output "El usuario $usuario no existe, no se puede eliminar."
}
}esle{
if ($usuariosExistentes | Where-Object { $_.usuario -eq $usuario })
{
Write-Output "El usuario $usuario ya existe, no se puede crear."
}else{
$password = GenerarPassword
Write-Output "$usuario,$grupo,$password" >> $archivoCSV
Write-Output "El usuario $usuario ha sido creado con la password $password en el grupo $grupo."
}
}
Crea un script llamado crear_usuarios_grupos.ps1 que cree los siguientes grupos:
GPWS01
GPWS02
…
GPWS09
En el caso de que el grupo no exista, haz que lo cree y saque por pantalla:
El grupo $nombre_grupo no existe, se crea
En el caso de que el grupo exista haz que no lo intente y saque por pantalla:
El grupo $nombre_grupo existe, no se crea
ayuda : $nombre_grupo=”GPWS03” ; Get-LocalGroup | Select-String -Pattern $nombre_grupo -Quiet
# crear_usuarios_grupos.ps1
# Bucle para crear los grupos GPWS01 a GPWS09
for ($i = 1; $i -le 9; $i++) {
$nombre_grupo = "GPWS{0:D2}" -f $i
$grupo_existe = Get-LocalGroup | Select-String -Pattern $nombre_grupo -Quiet
if ($grupo_existe) {
Write-Output "El grupo $nombre_grupo existe, no se crea"
} else {
# Si el grupo no existe, crear el grupo
New-LocalGroup -Name $nombre_grupo -Description "Grupo $nombre_grupo creado"
Write-Output "El grupo $nombre_grupo no existe, se crea"
}
}
Haz que el anterior script cree los siguientes usuarios dentro de los grupos correspondientes, con la contraseña alumno. Además haz que estén dentro del grupo Usuarios para que puedan loguearse utilizando el entorno gráfico
GPWS01
tunombre_gpws01_01
tunombre_gpws01_02
…
tunombre_gpws01_08
tunombre_gpws01_09
GPWS02
tunombre_gpws02_01
tunombre_gpws02_02
…
tunombre_gpws02_08
tunombre_gpws02_09
…
…
…
GPWS09
tunombre_gpws09_01
tunombre_gpws09_02
…
tunombre_gpws09_08
tunombre_gpws09_09
En el caso de que el usuario no exista, haz que lo cree y lo incorpore a su grupo, finalmente saque por pantalla:
El usuario $nombre_usuario con grupo $nombre_grupo no existe, se crea
En el caso de que el usuario exista haz que no lo intente y saque por pantalla:
El usuario $nombre_usuario existe, no se crea
En el caso de que el usuario no este en el grupo, haz que lo menta dentro del grupo y saque por pantalla:
El usuario $nombre_usuario no esta en el grupo $nombre_grupo, se hace miembro
En el caso de que el usuario este en el grupo, haz que saque por pantalla:
El usuario $nombre_usuario ya esta en el grupo $nombre_grupo no se hace nada
ayuda: Puedes borrar los usuarios y grupos :
foreach ($i in $(Get-LocalUser |sls -Pattern "tunombre_")){
Remove-LocalUser -Name $i
}
foreach ($i in $(Get-LocalGroup |sls -Pattern "GPWS")){
Remove-LocalGroup -Name $i
}
# crear_usuarios_grupos.ps1
$nombre_base = "tunombre_gpws"
#Si da problemas poner una contraseña más compleja
$contraseña = "alumno"
# Bucle para crear los grupos GPWS01 a GPWS09
for ($i = 1; $i -le 9; $i++) {
# Formatear el nombre del grupo
$nombre_grupo = "GPWS{0:D2}" -f $i
# Verificar si el grupo ya existe
$grupo_existe = Get-LocalGroup | Where-Object { $_.Name -eq $nombre_grupo }
if ($grupo_existe) {
Write-Output "El grupo $nombre_grupo existe, no se crea"
} else {
New-LocalGroup -Name $nombre_grupo -Description "Grupo $nombre_grupo creado automáticamente"
Write-Output "El grupo $nombre_grupo no existe, se crea"
}
# Bucle para crear los usuarios tunombre_gpwsXX_01 a tunombre_gpwsXX_09
for ($j = 1; $j -le 9; $j++) {
# Formatear el nombre del usuario
$nombre_usuario = "{0}{1:D2}_{2:D2}" -f $nombre_base, $i, $j
# Verificar si el usuario ya existe
$usuario_existe = Get-LocalUser | Where-Object { $_.Name -eq $nombre_usuario }
if ($usuario_existe) {
Write-Output "El usuario $nombre_usuario existe, no se crea"
} else {
# Crear el usuario con la contraseña especificada
New-LocalUser -Name $nombre_usuario -Password (ConvertTo-SecureString $contraseña -AsPlainText -Force) -FullName "$nombre_usuario"
Write-Output "El usuario $nombre_usuario con grupo $nombre_grupo no existe, se crea"
}
# Verificar si el usuario pertenece al grupo específico
$miembro_del_grupo = Get-LocalGroupMember -Group $nombre_grupo | Where-Object { $_.Name -eq $nombre_usuario }
if ($miembro_del_grupo) {
Write-Output "El usuario $nombre_usuario ya está en el grupo $nombre_grupo, no se hace nada"
} else {
Add-LocalGroupMember -Group $nombre_grupo -Member $nombre_usuario
Write-Output "El usuario $nombre_usuario no está en el grupo $nombre_grupo, se hace miembro"
}
# Verificar si el usuario pertenece al grupo Usuarios, para que pueda tener acceso con entorno gráfico
$miembro_de_usuarios = Get-LocalGroupMember -Group "Usuarios" | Where-Object { $_.Name -eq $nombre_usuario }
if ($miembro_de_usuarios) {
Write-Output "El usuario $nombre_usuario ya está en el grupo Usuarios, no se hace nada"
} else {
Add-LocalGroupMember -Group "Usuarios" -Member $nombre_usuario
Write-Output "El usuario $nombre_usuario no está en el grupo Usuarios, se hace miembro"
}
}
}
Haz un script llamado crear_usuarios_grupos_csv.ps1, que cree los usuarios que encontraras en el archivo users.csv, tiene que cumplir las siguientes condiciones:
En el caso de que el grupo no exista, haz que lo cree y saque por pantalla:
El grupo $nombre_grupo no existe, se crea
En el caso de que el grupo exista haz que no lo intente y saque por pantalla:
El grupo $nombre_grupo existe, no se crea
En el caso de que el usuario exista haz que no lo intente y saque por pantalla:
El usuario $nombre_usuario existe, no se crea
En el caso de que el usuario no este en el grupo, haz que lo meta dentro del grupo y saque por pantalla:
El usuario $nombre_usuario no esta en el grupo $nombre_grupo, se hace miembro
En el caso de que el usuario este en el grupo, haz que saque por pantalla:
El usuario $nombre_usuario ya esta en el grupo $nombre_grupo no se hace nada
En el caso de que el usuario no exista, haz que lo cree y lo incorpore a su grupo, finalmente haz que saque por pantalla:
El usuario $nombre_usuario con grupo $nombre_grupo no existe, se crea
Además se añada a un archivo el mensaje:
El usuario $nombre_usuario con $passwrd en el grupo $nombre_grupo se ha creado >> lista_usuarios_creados.dat
En el caso de que el usuario este en el grupo, haz que saque por pantalla:
El usuario $nombre_usuario ya esta en el grupo $nombre_grupo no se hace nada
# Script: crear_usuarios_grupos_csv.ps1
# Leer el archivo CSV
$users = Import-Csv -Path "users.csv"
# Recorrer cada usuario en el archivo CSV
foreach ($user in $users) {
$nombre_usuario = $user.usuario
$nombre_grupo = $user.grupo
$password = $user.password
$entorno_grafico = $user.EntGraf
# Verificar si el grupo existe
if (-Not (Get-LocalGroup -Name $nombre_grupo -ErrorAction SilentlyContinue)) {
Write-Output "El grupo $nombre_grupo no existe, se crea"
New-LocalGroup -Name $nombre_grupo
} else {
Write-Output "El grupo $nombre_grupo existe, no se crea"
}
# Verificar si el usuario existe
$usuarioExiste = Get-LocalUser -Name $nombre_usuario -ErrorAction SilentlyContinue
if ($usuarioExiste) {
Write-Output "El usuario $nombre_usuario existe, no se crea"
# Verificar si el usuario está en el grupo
$miembroDelGrupo = Get-LocalGroupMember -Group $nombre_grupo | Where-Object { $_.Name -eq $nombre_usuario }
if ($miembroDelGrupo) {
Write-Output "El usuario $nombre_usuario ya está en el grupo $nombre_grupo, no se hace nada"
} else {
Write-Output "El usuario $nombre_usuario no está en el grupo $nombre_grupo, se hace miembro"
Add-LocalGroupMember -Group $nombre_grupo -Member $nombre_usuario
}
} else {
# Crear el usuario
Write-Output "El usuario $nombre_usuario con grupo $nombre_grupo no existe, se crea"
New-LocalUser -Name $nombre_usuario -Password (ConvertTo-SecureString $password -AsPlainText -Force) -PasswordNeverExpires -UserMayNotChangePassword
Add-LocalGroupMember -Group $nombre_grupo -Member $nombre_usuario
$logMessage = "El usuario $nombre_usuario con $password en el grupo $nombre_grupo se ha creado"
$logMessage | Out-File -FilePath "lista_usuarios_creados.dat" -Append
}
# Verificar si el usuario debe tener acceso al entorno gráfico
if ($entorno_grafico -eq "Y") {
# Verificar si el usuario está en el grupo Usuarios
$miembroUsuarios = Get-LocalGroupMember -Group "Usuarios" | Where-Object { $_.Name -eq $nombre_usuario }
if ($miembroUsuarios) {
Write-Output "El usuario $nombre_usuario ya está en el grupo Usuarios, tiene acceso al entorno gráfico"
} else {
Write-Output "El usuario $nombre_usuario no está en el grupo Usuarios, se añade para acceso al entorno gráfico"
Add-LocalGroupMember -Group "Usuarios" -Member $nombre_usuario
}
} else {
Write-Output "El usuario $nombre_usuario no requiere acceso al entorno gráfico"
}
}
Haz un script llamado usuarios.ps1, que implementa un menú para gestionar usuarios en el sistema. El script permite listar usuarios, crear y eliminar usuarios, y modificar el nombre de un usuario existente.
Menú de Usuarios:
Listar usuarios
Crear usuario
Eliminar usuario
Modificar usuario
Salir
# Script: usuarios.ps1
function Listar-Usuarios {
Write-Output "Usuarios en el sistema:"
Get-LocalUser | ForEach-Object { Write-Output $_.Name }
}
function Crear-Usuario {
$nombreUsuario = Read-Host "Ingrese el nombre del nuevo usuario"
$password = Read-Host "Ingrese la contraseña del nuevo usuario" -AsSecureString
if (Get-LocalUser -Name $nombreUsuario -ErrorAction SilentlyContinue) {
Write-Output "El usuario $nombreUsuario ya existe."
} else {
New-LocalUser -Name $nombreUsuario -Password $password -FullName $nombreUsuario
Write-Output "El usuario $nombreUsuario ha sido creado."
}
}
function Eliminar-Usuario {
$nombreUsuario = Read-Host "Ingrese el nombre del usuario a eliminar"
if (Get-LocalUser -Name $nombreUsuario -ErrorAction SilentlyContinue) {
Remove-LocalUser -Name $nombreUsuario
Write-Output "El usuario $nombreUsuario ha sido eliminado."
} else {
Write-Output "El usuario $nombreUsuario no existe."
}
}
function Modificar-Usuario {
$nombreUsuario = Read-Host "Ingrese el nombre del usuario a modificar"
$nuevoNombre = Read-Host "Ingrese el nuevo nombre para el usuario"
if (Get-LocalUser -Name $nombreUsuario -ErrorAction SilentlyContinue) {
Rename-LocalUser -Name $nombreUsuario -NewName $nuevoNombre
Write-Output "El usuario $nombreUsuario ha sido renombrado a $nuevoNombre."
} else {
Write-Output "El usuario $nombreUsuario no existe."
}
}
do {
Write-Host "`nMenú de Usuarios:"
Write-Host "1. Listar usuarios"
Write-Host "2. Crear usuario"
Write-Host "3. Eliminar usuario"
Write-Host "4. Modificar usuario"
Write-Host "5. Salir"
$opcion = Read-Host "Seleccione opción"
switch ($opcion) {
1 { Listar-Usuarios }
2 { Crear-Usuario }
3 { Eliminar-Usuario }
4 { Modificar-Usuario }
5 { Write-Host "Saliendo..." }
Default { Write-Host "Opción incorrecta. Intente de nuevo." }
}
} until ($opcion -eq 5)
Haz el script grupos.ps1, que implementa un menú para gestionar grupos y sus miembros en PowerShell. El script permite listar grupos, ver miembros, crear y eliminar grupos, así como agregar y eliminar miembros de los grupos.
Menú de Grupos:
Listar grupos
Ver miembros de un grupo
Crear grupo (pide nombre grupo)
Elimina grupo (pide nombre grupo)
Crea miembro de un grupo (pide grupo y usuario)
Elimina miembro de un grupo (pide grupo y usuario)
Salir
# Script: grupo.ps1
function Listar-Grupos {
Write-Output "Grupos disponibles:"
Get-LocalGroup | ForEach-Object { Write-Output $_.Name }
}
function Ver-MiembrosDeGrupo {
$nombreGrupo = Read-Host "Ingrese el nombre del grupo"
if (Get-LocalGroup -Name $nombreGrupo -ErrorAction SilentlyContinue) {
Write-Output "Miembros del grupo $nombreGrupo:"
Get-LocalGroupMember -Group $nombreGrupo | ForEach-Object { Write-Output $_.Name }
} else {
Write-Output "El grupo $nombreGrupo no existe."
}
}
function Crear-Grupo {
$nombreGrupo = Read-Host "Ingrese el nombre del nuevo grupo"
if (Get-LocalGroup -Name $nombreGrupo -ErrorAction SilentlyContinue) {
Write-Output "El grupo $nombreGrupo ya existe."
} else {
New-LocalGroup -Name $nombreGrupo
Write-Output "El grupo $nombreGrupo ha sido creado."
}
}
function Eliminar-Grupo {
$nombreGrupo = Read-Host "Ingrese el nombre del grupo a eliminar"
if (Get-LocalGroup -Name $nombreGrupo -ErrorAction SilentlyContinue) {
Remove-LocalGroup -Name $nombreGrupo
Write-Output "El grupo $nombreGrupo ha sido eliminado."
} else {
Write-Output "El grupo $nombreGrupo no existe."
}
}
function Crear-MiembroDeGrupo {
$nombreGrupo = Read-Host "Ingrese el nombre del grupo"
$nombreUsuario = Read-Host "Ingrese el nombre del usuario a agregar"
if (Get-LocalGroup -Name $nombreGrupo -ErrorAction SilentlyContinue) {
Add-LocalGroupMember -Group $nombreGrupo -Member $nombreUsuario
Write-Output "El usuario $nombreUsuario ha sido agregado al grupo $nombreGrupo."
} else {
Write-Output "El grupo $nombreGrupo no existe."
}
}
function Eliminar-MiembroDeGrupo {
$nombreGrupo = Read-Host "Ingrese el nombre del grupo"
$nombreUsuario = Read-Host "Ingrese el nombre del usuario a eliminar"
if (Get-LocalGroup -Name $nombreGrupo -ErrorAction SilentlyContinue) {
Remove-LocalGroupMember -Group $nombreGrupo -Member $nombreUsuario
Write-Output "El usuario $nombreUsuario ha sido eliminado del grupo $nombreGrupo."
} else {
Write-Output "El grupo $nombreGrupo no existe."
}
}
do {
Write-Host "`nMenú de Grupos:"
Write-Host "1. Listar grupos"
Write-Host "2. Ver miembros de un grupo"
Write-Host "3. Crear grupo"
Write-Host "4. Eliminar grupo"
Write-Host "5. Crear miembro de un grupo"
Write-Host "6. Eliminar miembro de un grupo"
Write-Host "7. Salir"
$opcion = Read-Host "Seleccione opción"
switch ($opcion) {
1 { Listar-Grupos }
2 { Ver-MiembrosDeGrupo }
3 { Crear-Grupo }
4 { Eliminar-Grupo }
5 { Crear-MiembroDeGrupo }
6 { Eliminar-MiembroDeGrupo }
7 { Write-Host "Saliendo..." }
Default { Write-Host "Opción incorrecta. Intente de nuevo." }
}
} until ($opcion -eq 7)