Powershell
UTF-8
Establecer la codificación a UTF-8 para manejar caracteres especiales:
$OutputEncoding = [System.Text.Encoding]::UTF8Variables
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]$numero1Realizar las operacione:
$suma = $numero1 + $numero2
$resta = $numero1 - $numero2
$multiplicacion = $numero1 * $numero2Mostrar 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 $numero2Pará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:
-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):
-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:
-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, 5Usando 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 200Agregar elementos a un array
$miArray += 400 # Agrega 400 al arrayArray 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 200Array 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 ActiveDirectoryLeer un archivo .csv y convierte cada fila en un objeto PowerShell.
$lista = Import-CSV -Path $csvEliminar 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 delSearchBase.
Get-ADOrganizationalUnit -LDAPFilter "(name=$nombre_UO_predecesora)" -SearchBase $dominio -SearchScope Subtree -ErrorAction StopCrea 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 $falseVerifica si una ruta (archivo o carpeta) existe.
Test-Path $logPathElimina archivos o carpetas.
Remove-Item $logPathBusca 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 SilentlyContinueCrea 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 $dnUOAgrega texto a un archivo (sin sobrescribir).
Add-Content -Path $logPath -Value $mensajeDeclara 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 SilentlyContinueCrea 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 (tipousuario@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 $trueConvierte una cadena de texto a formato seguro (SecureString) para que pueda usarse como contraseña.
ConvertTo-SecureString $pass -AsPlainText -ForceAgrega 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 $idConvierte 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