Powershell

UTF-8

Establecer la codificación a UTF-8 para manejar caracteres especiales:

$OutputEncoding = [System.Text.Encoding]::UTF8

Variables

Solicitar los números al usuario con soporte para caracteres especiales:

$numero1 = Read-Host "Introduce el primer número"

Convertir los valores de texto a números:

$numero1 = [int]$numero1

Realizar las operacione:

$suma = $numero1 + $numero2
$resta = $numero1 - $numero2
$multiplicacion = $numero1 * $numero2

Mostrar los resultados:

Write-Host "La suma de $numero1 y $numero2 es: $suma"
Write-Host "La resta de $numero1 y $numero2 es: $resta"
Write-Host "La multiplicación de $numero1 y $numero2 es: $multiplicacion"

Funciones

Declaración de funciones:

# Función para relaizar la suma
function SUMA {
    param ($numero1, $numero2)
    return $numero1 + $numero2
}

# Función para realizar la resta
function RESTA {
    param ($numero1, $numero2)
    return $numero1 - $numero2
}

# Función para realizar la multiplicación
function MULTI {
    param ($numero1, $numero2)
    return $numero1 * $numero2
}

Llamada a la función pasandole varibales:

$suma = SUMA $numero1 $numero2
$resta = RESTA $numero1 $numero2
$multiplicacion = MULTI $numero1 $numero2

Parámetros

Obtener los números desde los parámetros:

$numero1 = [int]$args[0]
$numero2 = [int]$args[1]

Comprobar si se han pasado los parámetros correctos:

if ($args.Count -ne 2) {
    Write-Host "Por favor, proporciona exactamente dos números como parámetros."
    Write-Host "Uso: .\script.ps1 <numero1> <numero2>"
    exit
}

Operadores

Operadores de comparación comunes:

Operador
Significado
Ejemplo

-eq

Igual a

5 -eq 5 → $true

-ne

No igual a

5 -ne 3 → $true

-gt

Mayor que

5 -gt 3 → $true

-lt

Menor que

5 -lt 10 → $true

-ge

Mayor o igual que

5 -ge 5 → $true

-le

Menor o igual que

5 -le 6 → $true

Operadores de comparación de cadenas (texto):

Operador
Significado
Ejemplo

-eq

Igual (no sensible a mayúsculas)

"Hola" -eq "hola" → $true

-ceq

Igual (sensible a mayúsculas)

"Hola" -ceq "hola" → $false

-like

Coincidencia con comodines (*)

"archivo.txt" -like "*.txt"

-clike

-like sensible a mayúsculas

"Hola" -clike "H*"

-match

Coincidencia con regex

"abc123" -match "\d+"

-cmatch

Regex sensible a mayúsculas

"ABC123" -cmatch "ABC"

-contains

Contiene un valor (en colecciones)

@(1,2,3) -contains 2

Otros operadores útiles:

Operador
Significado
Ejemplo

-notcontains

No contiene el valor

@(1,2,3) -notcontains 4 → $true

-in

El valor está en la colección

2 -in @(1,2,3) → $true

-notin

El valor no está en la colección

4 -notin @(1,2,3) → $true

-is

Es del tipo especificado

"hola" -is [string]

-isnot

No es del tipo especificado

123 -isnot [string]

Bucles

Bucle "FOR"

for ($i = 1; $i -le 5; $i++) {
    Write-Host "Número $i"
}

Bucle "WHILE"

$count = 1
while ($count -le 5) {
    Write-Host "Contador $count"
    $count++
}

Bucle "FOREACH"

$numeros = 1..5  # Crea un arreglo con los números del 1 al 5
foreach ($numero in $numeros) {
    Write-Host "Número $numero"
}

Arrays

Declaración

Array simple con varios elementos

$miArray = 1, 2, 3, 4, 5

Usando el operador @()

$miArray = @(10, 20, 30)

Array vacío

$miArray = @()

Trabajo

Acceder a elementos del array

$miArray = @(100, 200, 300)
$miArray[0]   # Devuelve 100
$miArray[1]   # Devuelve 200

Agregar elementos a un array

$miArray += 400   # Agrega 400 al array

Array de diferentes tipos de datos

$miArray = @(1, "texto", $true, 3.14)

Iterar sobre un array

foreach ($item in $miArray) {
    Write-Output $item
}

Comprobar si contiene un elemento

$miArray -contains 200    # Devuelve $true si contiene 200

Array multidimensional

$matriz = New-Object 'object[,]' 2,2
$matriz[0,0] = "a"
$matriz[0,1] = "b"
$matriz[1,0] = "c"
$matriz[1,1] = "d"

Active Directory

Cargar el módulo de Active Directory necesario para usar cmdlets.

Import-Module ActiveDirectory

Leer un archivo .csv y convierte cada fila en un objeto PowerShell.

$lista = Import-CSV -Path $csv

Eliminar espacios en blanco al principio y final del texto. .Trim() es un método de la clase [string].

$nombre_UO = $ou.UO.Trim()
$nombre_UO_predecesora = $ou.'UO Predecesora'.Trim()

Compruebar si una cadena está vacía, es nula o contiene solo espacios.

[string]::IsNullOrWhiteSpace($nombre_UO_predecesora)

Busca una unidad organizativa en Active Directory. Parámetros clave:

  • -LDAPFilter "(name=$nombre)": busca por nombre.

  • -SearchBase $dominio: define el contexto donde buscar.

  • -SearchScope Subtree: busca en todos los niveles dentro del SearchBase.

Get-ADOrganizationalUnit -LDAPFilter "(name=$nombre_UO_predecesora)" -SearchBase $dominio -SearchScope Subtree -ErrorAction Stop

Crea una nueva unidad organizativa en AD. Parámetros clave:

  • -Name: nombre de la nueva UO.

  • -Path: ruta LDAP completa donde crearla.

  • -ProtectedFromAccidentalDeletion $false: permite borrar la UO sin cambiar propiedades de protección.

 New-ADOrganizationalUnit -Name $nombre_UO -Path $rutaPadre -ProtectedFromAccidentalDeletion $false

Verifica si una ruta (archivo o carpeta) existe.

Test-Path $logPath

Elimina archivos o carpetas.

Remove-Item $logPath

Busca grupos de Active Directory. Párametros clave:

  • -LDAPFilter "(cn=...)": busca por nombre común del grupo (CN).

  • -SearchBase: limita la búsqueda a una UO específica.

  • -ErrorAction SilentlyContinue: oculta errores si el grupo no se encuentra.

Get-ADGroup -LDAPFilter "(cn=$nombreGrupo)" -SearchBase $dnUO -ErrorAction SilentlyContinue

Crea un nuevo grupo en Active Directory. Párametros clave:

  • -Name: nombre del grupo.

  • -GroupScope Global: ámbito del grupo (Global, Universal, DomainLocal).

  • -GroupCategory Security: tipo del grupo (Security o Distribution).

  • -Path: UO donde se crea.

New-ADGroup -Name $nombreGrupo -GroupScope Global -GroupCategory Security -Path $dnUO

Agrega texto a un archivo (sin sobrescribir).

Add-Content -Path $logPath -Value $mensaje

Declara los parámetros que el script recibirá cuando se ejecute.

param (
    [string]$csvPath,
    [string]$dominioBase
)

Busca usuarios en Active Directory. Parámetros clave:

  • -Filter "SamAccountName -eq '$id'": busca por nombre de cuenta (ID de usuario).

  • -ErrorAction SilentlyContinue: oculta errores si no se encuentra.

Get-ADUser -Filter "SamAccountName -eq '$id'" -ErrorAction SilentlyContinue

Crea un nuevo usuario en Active Directory. Parámetros clave:

  • -SamAccountName: nombre de inicio de sesión.

  • -Name: nombre completo.

  • -GivenName: nombre de pila.

  • -Surname: apellido.

  • -UserPrincipalName: dirección de correo electrónico (tipo usuario@asix.local).

  • -Path: ruta LDAP (unidad organizativa).

  • -AccountPassword: contraseña (en formato seguro).

  • -Enabled $true: cuenta habilitada.

  • -ChangePasswordAtLogon $true: fuerza cambio de contraseña en primer inicio.

New-ADUser `
            -SamAccountName $id `
            -Name "$nombre $apellido" `
            -GivenName $nombre `
            -Surname $apellido `
            -UserPrincipalName "$id@$($dominioBase -replace '^DC=','' -replace ',DC=', '.')"`
            -Path $ouAD `
            -AccountPassword (ConvertTo-SecureString $pass -AsPlainText -Force) `
            -Enabled $true `
            -ChangePasswordAtLogon $true

Convierte una cadena de texto a formato seguro (SecureString) para que pueda usarse como contraseña.

ConvertTo-SecureString $pass -AsPlainText -Force

Agrega un usuario a un grupo. Parámetros clave:

  • -Identity: grupo de destino (objeto o nombre).

  • -Members: nombre de usuario (SamAccountName).

Add-ADGroupMember -Identity $grupoAD -Members $id

Convierte el DN del dominio (DC=ASIX,DC=LOCAL) a un formato de dominio tradicional (asix.local).

  • Uso: Construir el UserPrincipalName.

$($dominioBase -replace '^DC=','' -replace ',DC=', '.')

Last updated