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)
Crea un script llamado local_users.ps1, que cumpla las siguientes condiciones
Si ejecutamos la ayuda:
Si creamos un nuevo grupo, y listamos los grupos vemos que aparece.
Si volvemos a intentar crearlo vemos que no nos deja, recoge el error y sácalo por pantalla como se muestra a continuación.
Finalmente crea el grupo grupo_tuapellido
En el caso de intentar borrar un grupo que no existe haz que saque el mensaje por pantalla:
Si creamos un nuevo usuario llamado tunombre, se creara con la contraseña
@lumn0
Después crea un usuario llamado tunombre1 con una contraseña que no cumpla con las políticas de seguridad y haz que saque el error que muestra en el pantallazo sin crear el usuario.
Vuelve a crear el usuario tunombre1 con una contraseña que cumpla con las políticas de seguridad
Crear el usuario tunombre2 con una contraseña que cumpla con las políticas de seguridad en el grupo que no existe G2, en este caso el script deberá crear el grupo de forma automática.
Crear el usuario tunombre3 con una contraseña que cumpla con las políticas de seguridad en el grupo que ahora si existe G2.
Por ultimo lista los miembros del grupo G2
Mete al usuario tunombre3 en grupo G3 que no existe sin poner -usuario ni -grupo, haz que salga el mensaje de error.
Mete al usuario tunombre3 en grupo G3 que no existe sin poner -grupo, haz que salga el mensaje de error.
Mete al usuario tunombre3 en grupo G3 haz que salga el mensaje de error.
Crea el grupo G3 y mete finalmente al usuario tunombre3 en grupo G3.
Lista los usuarios del grupo G3
Elimina el usuario tunombre3 del grupo G3 (haz que se recojan los mismo errores cuando eliminamos usuarios de un grupo que cuando los metemos)
Lista los usuarios del grupo G3 y G2
Por ultimo ejecuta el script test_local_users.ps1. para probar el script
param (
[string]$password = "@lumn0",
[string]$nuevo_usuario,
[string]$grupo, #cuando creamos un nuevo usuario lo metemos dentro de este grupo si existe si no lo creamos, tambien para añadir y quitar usuarios del grupo
[string]$usuario, #lo usasmos para añadir usuarios y quitar usuarios del grupo
[string]$listar_miembros_grupo,
[string]$nuevo_grupo,
[string]$eliminar_grupo,
[string]$eliminar_usuario,
[switch]$eliminar_usuario_grupo,
[switch]$meter_usuario_grupo,
[switch]$help,
[switch]$listar_usuarios,
[switch]$listar_grupos
)
function help {
Write-Host ""
Write-Host "Mostrar ayuda" -ForegroundColor Gray
Write-Host "local_users.ps1 -help"
Write-Host ""
Write-Host "Listar los grupos" -ForegroundColor Gray
Write-Host "local_users.ps1 -listar_grupos"
Write-Host ""
Write-Host "Crear un nuevo grupo" -ForegroundColor Gray
Write-Host "local_users.ps1 -nuevo_grupo [grupo]"
Write-Host ""
Write-Host "Eliminar un grupo" -ForegroundColor Gray
Write-Host "local_users.ps1 -eliminar_grupo [grupo]"
Write-Host ""
Write-Host "Crear un nuevo usuario" -ForegroundColor Gray
Write-Host "local_users.ps1 -nuevo_usuario [usuario]"
Write-Host "local_users.ps1 -nuevo_usuario [usuario] -password [password]"
Write-Host "local_users.ps1 -nuevo_usuario [usuario] -password [password] -grupo [Grupo]"
Write-Host ""
Write-Host "Eliminar un usuario" -ForegroundColor Gray
Write-Host "local_users.ps1 -eliminar_usuario [usuario]"
Write-Host ""
Write-Host "Listar los miembros de un grupo" -ForegroundColor Gray
Write-Host "local_users.ps1 -listar_miembros_grupo [grupo]"
Write-Host ""
Write-Host "Meter un usuario a un grupo" -ForegroundColor Gray
Write-Host ".\local_users.ps1 -meter_usuario_grupo -usuario [usuario] -grupo [grupo]"
Write-Host ""
Write-Host "Eliminar usuario de un grupo" -ForegroundColor Gray
Write-Host ".\local_users.ps1 -eliminar_usuario_grupo -usuario [usuario] -grupo [grupo]"
}
function Listar_Grupos {
Write-Host "Grupos disponibles:" -ForegroundColor Green
Get-LocalGroup | ForEach-Object { Write-Host $_.Name }
}
function Listar_MiembrosDeGrupo {
if (Get-LocalGroup -Name $listar_miembros_grupo -ErrorAction SilentlyContinue) {
Write-Host "Miembros del grupo $listar_miembros_grupo :" -ForegroundColor Green
Get-LocalGroupMember -Group $listar_miembros_grupo | ForEach-Object { Write-Host $_.Name }
} else {
Write-Host "El grupo $listar_miembros_grupo no existe." -ForegroundColor Red
}
}
function Crear_Grupo {
if (Get-LocalGroup -Name $nuevo_grupo -ErrorAction SilentlyContinue) {
Write-Host "El grupo $nuevo_grupo ya existe." -ForegroundColor Red
} else {
New-LocalGroup -Name $nuevo_grupo
Write-Host "Creamos el grupo: $nuevo_grupo" -ForegroundColor Green
}
}
function Eliminar_Grupo {
if (Get-LocalGroup -Name $eliminar_grupo -ErrorAction SilentlyContinue) {
Remove-LocalGroup -Name $eliminar_grupo
Write-Host "El grupo $eliminar_grupo ha sido eliminado." -ForegroundColor Green
} else {
Write-Host "El grupo $eliminar_grupo no existe." -ForegroundColor Red
}
}
function Meter_Usuario_Grupo {
if ([String]::IsNullOrEmpty($grupo)){
Write-Host "Necesitamos el parametro -grupo" -ForegroundColor Red
}elseif ([String]::IsNullOrEmpty($usuario)){
Write-Host "Necesitamos el parametro -usuario" -ForegroundColor Red
}elseif (-not (Get-LocalGroup -Name $grupo -ErrorAction SilentlyContinue)) {
Write-Host "El grupo $grupo no existe" -ForegroundColor Red
}elseif (-not (Get-LocalUser -Name $usuario -ErrorAction SilentlyContinue)) {
Write-Host "El usuario $usuario no existe" -ForegroundColor Red
} else {
Add-LocalGroupMember -Group $grupo -Member $usuario
Write-Host "El usuario $usuario ha sido agregado al grupo $grupo" -ForegroundColor Green
}
}
function Eliminar_Usuario_Grupo {
if ([String]::IsNullOrEmpty($grupo)){
Write-Host "Necesitamos el parametro -grupo" -ForegroundColor Red
}elseif ([String]::IsNullOrEmpty($usuario)){
Write-Host "Necesitamos el parametro -usuario" -ForegroundColor Red
}elseif (-not (Get-LocalGroup -Name $grupo -ErrorAction SilentlyContinue)) {
Write-Host "El grupo $grupo no existe" -ForegroundColor Red
}elseif (-not (Get-LocalUser -Name $usuario -ErrorAction SilentlyContinue)) {
Write-Host "El usuario $usuario no existe" -ForegroundColor Red
} else {
Remove-LocalGroupMember -Group $grupo -Member $usuario
Write-Host "El usuario $usuario ha sido eliminado del grupo $grupo." -ForegroundColor Green
}
}
function Listar_Usuarios {
Write-Host "Usuarios en el sistema:" -ForegroundColor Green
Get-LocalUser | ForEach-Object { Write-Host $_.Name }
}
function Crear_Usuario {
$ErrorActionPreference="Stop"
if (Get-LocalUser -Name $nuevo_usuario -ErrorAction SilentlyContinue) {
Write-Host "El usuario $nuevo_usuario ya existe." -ForegroundColor Red
} else {
$usuario_creado=$True
try{
$cadena_secure_string = $password | ConvertTo-SecureString -AsPlainText -Force
New-LocalUser -Name $nuevo_usuario -Password $cadena_secure_string -FullName $nuevo_usuario
Write-Host "El usuario $nuevo_usuario ha sido creado y añadido al grupo Users." -ForegroundColor Green
}catch{
$usuario_creado=$False
Write-Host "Error: la contraseña no cumple con los requititos no creamos el usuario $nuevo_usuario " -ForegroundColor Red
}
if($usuario_creado){
# Para que los usuarios puedan iniciar sesión con entorno gráfico
# Add-LocalGroupMember -Group "Users" -Member $nuevo_usuario
if (-not [String]::IsNullOrEmpty($grupo)){
if (-not (Get-LocalGroup -Name $grupo -ErrorAction SilentlyContinue)) {
New-LocalGroup -Name $grupo
Write-Host "Creamos el grupo: $grupo" -ForegroundColor Green
}
Add-LocalgroupMember -Group $grupo -Member $nuevo_usuario
Write-Host "Metemos al usuario $nuevo_usuario en el grupo $grupo" -ForegroundColor Green
}
}
}
$ErrorActionPreference="Continue"
}
function Eliminar_Usuario {
if (Get-LocalUser -Name $eliminar_usuario -ErrorAction SilentlyContinue) {
Remove-LocalUser -Name $eliminar_usuario
Write-Host "El usuario $eliminar_usuario ha sido eliminado." -ForegroundColor Green
} else {
Write-Host "El usuario $eliminar_usuario no existe." -ForegroundColor Red
}
}
if ($help){help}
if ($listar_grupos){Listar_Grupos}
if (-not [String]::IsNullOrEmpty($listar_miembros_grupo)){Listar_MiembrosDeGrupo}
if (-not [String]::IsNullOrEmpty($nuevo_grupo)){Crear_Grupo}
if (-not [String]::IsNullOrEmpty($eliminar_grupo)){Eliminar_Grupo}
if ($meter_usuario_grupo){Meter_Usuario_Grupo}
if ($eliminar_usuario_grupo){Eliminar_Usuario_Grupo}
if ($listar_usuarios){Listar_Usuarios}
if (-not [String]::IsNullOrEmpty($nuevo_usuario)){Crear_Usuario}
if (-not [String]::IsNullOrEmpty($eliminar_usuario)){Eliminar_Usuario}
#function prompt { "PS C:\> "}
Crea un script llamado AD.ps1, que cumpla las siguientes condiciones
Instala el Active directory utiliza como nombre de dominio : tunombre.local
Haz que toda la decencia con el nombre del dominio dentro del script se haga con las siguientes variables:
$dirAD="DC=tunombre,DC=local"
,$mail="@tunombre.local"
Si ejecutamos:
Si ejecutamos:
Haz que cree, borre y liste las unidades organizativas, si intenta crearlas y ya existe haz que salga un error por pantalla, en el caso de que intente eliminarlas y no existan haz que salga otro error por pantalla.
Haz que cree, borre y liste los grupos del AD, si intenta crearlos y ya existe haz que salga un error por pantalla, en el caso de que intente eliminarlas y no existan haz que salga otro error por pantalla.
Haz que cree, borre y liste los usuarios del AD, si intenta crearlos y ya existe haz que salga un error por pantalla, en el caso de que intente eliminarlas y no existan haz que salga otro error por pantalla, al igual que antes si intenta crear usuarios con una contraseña insegura que de te un error, si intenta crearlo en un grupo que no existe que cree el grupo antes:
Por ultimo ejecuta el script test_AD.ps1 para probar el script
param (
[string]$password = "@lumn01234",
[string]$nuevo_usuario,
[string]$grupo, #cuando creamos un nuevo usuario lo metemos dentro de este grupo si existe si no lo creamos, tambien para añadir y quitar usuarios del grupo
[string]$usuario, #lo usasmos para añadir usuarios y quitar usuarios del grupo
[string]$listar_miembros_grupo,
[string]$nuevo_grupo,
[string]$eliminar_grupo,
[string]$eliminar_usuario,
[switch]$eliminar_usuario_grupo,
[switch]$meter_usuario_grupo,
[switch]$help,
[switch]$listar_usuarios,
[switch]$listar_grupos,
[switch]$info,
[string]$nueva_OU ,
[string]$eliminar_OU,
[switch]$listar_OU
)
$dirAD="DC=tunombre,DC=local"
$mail="@tunombre.local"
function Info { Get-ADComputer -Filter * }
function help {
Write-Host ""
Write-Host "Mostrar ayuda" -ForegroundColor Gray
Write-Host "AD.ps1 -help"
Write-Host ""
Write-Host "Mostrar información del AD" -ForegroundColor Gray
Write-Host "AD.ps1 -info"
Write-Host ""
Write-Host "Listar las unidades organizativas" -ForegroundColor Gray
Write-Host "AD.ps1 -listar_OU"
Write-Host ""
Write-Host "Crear una nueva unidades organizativas" -ForegroundColor Gray
Write-Host "AD.ps1 -nuevo_OU [grupo]"
Write-Host ""
Write-Host "Borrar una unidad organizativas" -ForegroundColor Gray
Write-Host "AD.ps1 -eliminar_OU [grupo]"
Write-Host ""
Write-Host "Listar los grupos" -ForegroundColor Gray
Write-Host "AD.ps1 -listar_grupos"
Write-Host ""
Write-Host "Crear un nuevo grupo" -ForegroundColor Gray
Write-Host "AD.ps1 -nuevo_grupo [grupo]"
Write-Host ""
Write-Host "Eliminar un grupo" -ForegroundColor Gray
Write-Host "AD.ps1 -eliminar_grupo [grupo]"
Write-Host ""
Write-Host "Crear un nuevo usuario" -ForegroundColor Gray
Write-Host "AD.ps1 -nuevo_usuario [usuario]"
Write-Host "AD.ps1 -nuevo_usuario [usuario] -password [password]"
Write-Host "AD.ps1 -nuevo_usuario [usuario] -password [password] -grupo [Grupo]"
Write-Host ""
Write-Host "Eliminar un usuario" -ForegroundColor Gray
Write-Host "AD.ps1 -eliminar_usuario [usuario]"
Write-Host ""
Write-Host "Listar los miembros de un grupo" -ForegroundColor Gray
Write-Host "AD.ps1 -listar_miembros_grupo [grupo]"
Write-Host ""
Write-Host "Meter un usuario a un grupo" -ForegroundColor Gray
Write-Host ".\AD.ps1 -meter_usuario_grupo -usuario [usuario] -grupo [grupo]"
Write-Host ""
Write-Host "Eliminar usuario de un grupo" -ForegroundColor Gray
Write-Host ".\AD.ps1 -eliminar_usuario_grupo -usuario [usuario] -grupo [grupo]"
}
function Listar_Grupos {
Write-Host "Grupos disponibles:" -ForegroundColor Green
Get-ADGroup -Filter * | ForEach-Object { Write-Host $_.Name }
}
function Listar_MiembrosDeGrupo {
if (Get-ADGroup -Filter "Name -eq '$listar_miembros_grupo'"){
Write-Host "Miembros del grupo $listar_miembros_grupo :" -ForegroundColor Green
Get-ADGroupMember -Identity $listar_miembros_grupo
} else {
Write-Host "El grupo $listar_miembros_grupo no existe." -ForegroundColor Red
}
}
function Crear_Grupo {
if (Get-ADGroup -Filter "Name -eq '$nuevo_grupo'") {
Write-Host "El grupo $nuevo_grupo ya existe." -ForegroundColor Red
} else {
New-ADGroup -DisplayName $nuevo_grupo -Name $nuevo_grupo -GroupScope DomainLocal -GroupCategory Security -Path $dirAD
Write-Host "Creamos el grupo: $nuevo_grupo" -ForegroundColor Green
}
}
function Eliminar_Grupo {
if (Get-ADGroup -Filter "Name -eq '$eliminar_grupo'") {
Remove-ADGroup -Identity $eliminar_grupo -Confirm:$false
Write-Host "El grupo $eliminar_grupo ha sido eliminado." -ForegroundColor Green
} else {
Write-Host "El grupo $eliminar_grupo no existe." -ForegroundColor Red
}
}
function Meter_Usuario_Grupo {
if ([String]::IsNullOrEmpty($grupo)){
Write-Host "Necesitamos el parametro -grupo" -ForegroundColor Red
}elseif ([String]::IsNullOrEmpty($usuario)){
Write-Host "Necesitamos el parametro -usuario" -ForegroundColor Red
}elseif (-not (Get-ADGroup -Filter "Name -eq '$grupo'")) {
Write-Host "El grupo $grupo no existe" -ForegroundColor Red
}elseif (-not (Get-ADUser -Filter "Name -eq '$usuario'")) {
Write-Host "El usuario $usuario no existe" -ForegroundColor Red
} else {
Add-ADGroupMember -Identity $grupo -Members $usuario
Add-LocalGroupMember -Group $grupo -Member $usuario
Write-Host "El usuario $usuario ha sido agregado al grupo $grupo" -ForegroundColor Green
}
}
function Eliminar_Usuario_Grupo {
if ([String]::IsNullOrEmpty($grupo)){
Write-Host "Necesitamos el parametro -grupo" -ForegroundColor Red
}elseif ([String]::IsNullOrEmpty($usuario)){
Write-Host "Necesitamos el parametro -usuario" -ForegroundColor Red
}elseif (-not (Get-ADGroup -Filter "Name -eq '$grupo'")) {
Write-Host "El grupo $grupo no existe" -ForegroundColor Red
}elseif (-not (Get-ADUser -Filter "Name -eq '$nuevo_usuario'")) {
Write-Host "El usuario $usuario no existe" -ForegroundColor Red
} else {
Remove-ADGroupMember -Identity $grupo -Members $usuario
Write-Host "El usuario $usuario ha sido eliminado del grupo $grupo." -ForegroundColor Green
}
}
function Listar_Usuarios {
Write-Host "Usuarios en el A:" -ForegroundColor Green
Get-ADUser -Filter * | Select-Object Name
}
function Crear_Usuario {
$ErrorActionPreference="Stop"
if (Get-ADUser -Filter "Name -eq '$nuevo_usuario'") {
Write-Host "El usuario $nuevo_usuario ya existe." -ForegroundColor Red
} else {
$usuario_creado=$True
try{
$cadena_secure_string = $password | ConvertTo-SecureString -AsPlainText -Force
New-AdUser -Name $nuevo_usuario -SamAccountName $nuevo_usuario -UserPrincipalName $nuevo_usuario$mail -GivenName $nuevo_usuario -AccountPassword $cadena_secure_string -Enabled $True
Write-Host "El usuario $nuevo_usuario ha sido creado y añadido al grupo Users." -ForegroundColor Green
}catch{
$usuario_creado=$False
Write-Host "Error: la contraseña no cumple con los requititos no creamos el usuario $nuevo_usuario " -ForegroundColor Red
}
if($usuario_creado){
# Para que los usuarios puedan iniciar sesión con entorno gráfico
# Add-LocalGroupMember -Group "Users" -Member $nuevo_usuario
if (-not [String]::IsNullOrEmpty($grupo)){
if(-not (Get-ADGroup -Filter "Name -eq '$grupo'")) {
New-ADGroup -DisplayName $grupo -Name $grupo -GroupScope DomainLocal -GroupCategory Security -Path $dirAD
Write-Host "Creamos el grupo: $grupo" -ForegroundColor Green
}
Add-ADGroupMember -Identity Group $grupo -Member $nuevo_usuario
Write-Host "Metemos al usuario $nuevo_usuario en el grupo $grupo" -ForegroundColor Green
}
}
}
$ErrorActionPreference="Continue"
}
function Eliminar_Usuario {
if (Get-ADUser -Filter "Name -eq '$eliminar_usuario'") {
Remove-ADUser -Identity $eliminar_usuario -Confirm:$false
Write-Host "El usuario $eliminar_usuario ha sido eliminado." -ForegroundColor Green
} else {
Write-Host "El usuario $eliminar_usuario no existe." -ForegroundColor Red
}
}
function Crear_OU {
if(Get-ADOrganizationalUnit -Filter "Name -eq '$nueva_OU'"){
Write-Host "$nueva_OU existe no se crea" -ForegroundColor Red
}else{
New-ADOrganizationalUnit -DisplayName $nueva_OU -Name $nueva_OU -path "DC=tunombre,DC=local"
Write-Host "$nueva_OU se ha creado" -ForegroundColor Green
}
}
function Eliminar_OU {
if(-not (Get-ADOrganizationalUnit -Filter "Name -eq '$eliminar_OU'")){
Write-Host "$eliminar_OU no existe no se elimina" -ForegroundColor Red
}else{
Set-ADOrganizationalUnit -Identity "OU=$eliminar_OU,DC=tunombre,DC=local" -ProtectedFromAccidentalDeletion $False
Remove-ADOrganizationalUnit -Identity "OU=$eliminar_OU,DC=tunombre,DC=local" -Recursive -Confirm:$false
Write-Host "$eliminar_OU se ha eliminado de forma recursiva sin confirmación" -ForegroundColor Green
}
}
if ($help){help}
if ($listar_grupos){Listar_Grupos}
if (-not [String]::IsNullOrEmpty($listar_miembros_grupo)){Listar_MiembrosDeGrupo}
if (-not [String]::IsNullOrEmpty($nuevo_grupo)){Crear_Grupo}
if (-not [String]::IsNullOrEmpty($eliminar_grupo)){Eliminar_Grupo}
if ($meter_usuario_grupo){Meter_Usuario_Grupo}
if ($eliminar_usuario_grupo){Eliminar_Usuario_Grupo}
if ($listar_usuarios){Listar_Usuarios}
if (-not [String]::IsNullOrEmpty($nuevo_usuario)){Crear_Usuario}
if (-not [String]::IsNullOrEmpty($eliminar_usuario)){Eliminar_Usuario}
#--AD--
if ($info){Info}
if (-not [String]::IsNullOrEmpty($nueva_OU)){Crear_OU}
if (-not [String]::IsNullOrEmpty($eliminar_OU)){Eliminar_OU}
if ($listar_OU){
Get-ADOrganizationalUnit -LDAPFilter "(name=*)" | FT Name,DistinguishedName
}
#function prompt { "PS C:\> "}