- Variables
- Constantes
- Ámbito
- Tipos
- Tipos simples
- Numéricas
- Caracteres
- Fechas
- Arrays
- Arrays de números
- Arrays de caracteres (cadenas)
- Tipos complejos
- Objetos
- Ficheros
- Operaciones aritméticas
- Conversiones entre sistemas numéricos
- Operaciones lógicas
- Operaciones de comparación
- Sentencias condicionales
- Sentencias de repetición
- Funciones
La programación es necesaria para realizar tareas de forma automática y consiste en indicar ordenes al sistema, en PowerShell el conjunto de ordenes se puede realizar mediante scripts. Un script es un conjunto de comandos (cmdlets) y elementos de programación (bucles, condicionales, comparaciones, etc.) que se ejecutan sobre PowerShell y realizan alguna función.
Ahora podemos hacernos algunas preguntas relacionadas con lo que queremos hacer utilizando scripts:
- ¿Cómo almacenar un valor de forma temporal?
- ¿Cómo almacenar un valor de forma permanente?
- ¿Cómo buscar una cadena?
- ¿Cómo buscar una cadena que ha introducido el usuario?
- ¿Cómo distinguir entre dos opciones?
- ¿Cómo distinguir entre varias opciones?
- ¿Cómo repetir algo?
- ¿Cómo utilizar algo nuevamente y no queremos añadirlo al código?
Variables
El sistema operativo almacena valores temporales en memoria que desaparecen cuando se cierra el sistema operativo, en PowerShell se pueden utilizar datos y almacenarlos hasta que se cierra PowerShell.
En programación, las variables son espacios reservados en la memoria que, como su nombre indica, pueden cambiar de contenido a lo largo de la ejecución de un programa. Una variable corresponde a un área reservada en la memoria principal del ordenador.
Características de las variables:
- Se almacenan valores temporales en memoria que desaparecen cuando se cierra PowerShell.
- Almacenan información.
- Se pueden almacenar números te todo tipo, letras, conjunto de letras.
- Los datos con los que estamos trabajando también se pueden almacenar en el
sistema de forma permanente.
- Concepto de variable relacionado con almacenar datos durante un tiempo.
- Datos que pueden ser introducidos por el usuario.
- Datos que se pueden modificar mediante cálculos.
- Datos que se pueden escribir.
- Datos que se pueden dar formato.
- Datos que residen en la memoria.
Ejemplo
Asignar un valor a una variable y mostrar el valor por pantalla
$cantidad=20
Write-Host $cantidad
En programación, una constante es un valor que no puede ser alterado/modificado durante la ejecución de un programa, únicamente puede ser leído.
Una constante corresponde a una longitud fija de un área reservada en la memoria principal del ordenador, donde el programa almacena valores fijos.
El ámbito de una variable (llamado “scope” en inglés) es la zona del programa en la que se define la variable.
En PowerShell no es necesario establecer el tipo de dato aunque se puede hacer indicando el tipo de variable entre corchetes [ ]. Pero se puede hacer si se quiere.
Ejemplo
Crear una variable de tipo numérica y mostrar el valor por pantalla
[Int]$num=5
$num
Para ver el tipo de variable se utiliza el método
$var.getType()
Ejemplo
Ver el tipo de las siguientes variables
[Int]$num=5
$num.GetType()
[Char]$num=5
$num.GetType()
![]()
Ejercicio
Crear una variable con el valor 20 indicando el tipo entero para una de las variables y el tipo carácter para la otra, después ver el contenido y comprobar el tipo después
[int]$cantidad=20
Write-Host $cantidad
$cantidad.GetType()
[string]$cantidad2=20
Write-Host $cantidad2
$cantidad2.GetType()
![]()
Numéricas
Variables que representan valores enteros.
Ejemplo
$num=5
$num
Caracteres
Variables que representan valores tipo carácter.
Ejemplo
#Caracteres
$car='c'
$car
Booleanos
Representan el valor verdadero (1) o falso (0).
Ejemplo
$true
$false
Fechas
Fechas también son un tipo de variable, las fechas sirven para saber en qué momento ocurrió algo en relación con el momento actual.
Cmdlet para mostrar la fecha del sistema
Get-Date
Ejemplos
Mostrar la fecha actual
(Get-Date)
Mostrar año
Get-Date).Year
La fecha del sistema se puede cambiar utilizando el cmdlet
Set-Date
Ejemplo
Cambiar la fecha del sistema
Set-Date -date "6/1/2006 8:30 AM"
A las fechas se les puede dar formato
Ejemplos
Mostrar la fecha con distintos formatos
Get-Date -Format 'HH:mm:ss dddd MMMM d'
Get-Date).Year.tostring()+(Get-Date).Month.tostring()+(Get-Date).Day.tostring()
Get-Date).ToString("yyyyMMdd")
Get-Date).ToString("ddMMyyyy")
Las operaciones sobre fechas (métodos) son:
AddSeconds
AddMinutes
AddHours
AddDays
AddMonths
AddYears
Ejemplos
Mostrar la fecha del día anterior (con y sin formato)
(Get-Date).AddDays(-1)
(Get-Date).AddDays(-1).ToString("ddMMyyyy")
Mostrar las fechas de la semana pasada
-1..-7 | % {(Get-Date).AddDays($_).ToString("ddMMyyyy")}
Ejercicio
Calcular de forma aleatoria un día entre hoy y hace cinco años
#Día aleatorio entre hoy y hace cinco años
$diaaleatorio=Get-Random (1..(5*365))
(Get-Date).AddDays(-$diaaleatorio)
Para crear una variable que representa un intervalo de tiempo se utiliza el cmdlet
New-TimeSpan
Ejemplo
Mostrar el intervalo de tiempo entre dos fechas
New-TimeSpan $(Get-Date) $(Get-Date -month 7 -day 19 -year 2016)
Arrays
Una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo.
Los arrays pueden contener cualquier carácter, los arrays más utilizados son los arrays de números y de caracteres que se conocen como cadenas.
Arrays de números
Arrays que contienen números.
Ejemplo
Crear un array de números y mostrar el primer elemento
$arraynumeros="12345"
Write-Host $arraynumeros
Write-Host $arraynumeros[1]
Arrays de caracteres
Arrays que contienen cualquier tipo de carácter y se denominan cadenas.
Ejemplos
Mostrar una cadena
$palabra=’hola’
Write-Host $palabra
Ver elementos de arrays de caracteres, extraer varios elementos
#Extraer primer elemento (elemento 0)
$frase='Texto largo'
Write-Host $frase[0]
#Extraer segundo elemento (elemento 1)
$frase='Texto largo'
Write-Host $frase[1]
#Extraer último elemento
$frase='Texto largo'
Write-Host $frase[10]
Sobre las cadenas se pueden realizar varias operaciones, algunas operaciones que se pueden realizar en PowerShell son:
Ejemplo
$palabra1='hola-'
$palabra2='adios'
$frasecontatenada=$palabra1+$palabra2
$frasecontatenada
Ejemplo
'Hola'.Length
Ejemplo
'Hola'.ToUpper()
Ejemplo
'Hola'.ToLower()
Ejemplo
'Hola'.Replace('o', '0')
"Hola buenas Lucas"-replace "hola|buenas","adios"
Ejemplo
'Hola,buenas'.Split(',')
Ejemplo
'Hola buenas '.TrimStart()
'Hola buenas '.TrimEnd()
'Hola buenas '.Trim()
Ejemplo
'Hola'.Substring(0)
'Hola'.Substring(0,2)
'Hola'.Substring(2)
'Hola'.Substring(2,1)
Ejercicio
Reducir texto con puntos suspensivos
$LongitudMax = 10
$Texto = 'Texto para acortar'
if ($Texto.Length -gt $LongitudMax)
{
$Texto.Substring(0,$LongitudMax) + '...'
}
else
{
$Texto
}
Ejemplo
'Hola'.Insert(2, "oooo")
Ejemplo
'Hola'.Remove(3)
'Hola'.Remove(2)
'Hola'.Remove(1)
'Hola'.Remove(1,1)
'Hola'.Remove(2,2)
'Hola'.Remove(1,2)
'Hola'.Remove(1,3)
- Determinar la primera posición de un carácter
Ejemplo
'Holasa'.IndexOf('a')
- Determinar la última posición de un carácter
Ejemplo
'Holasa'.LastIndexOf('a')
- Determinar si el principio de una cadena coincide con otra cadena
Ejemplo
'Hola'.StartsWith('H')
- Determinar si el principio de una cadena coincide con otra cadena
Ejemplo
'Hola'.EndsWith('lo')
- Determinar si un carácter está contenido en una cadena
Ejemplo
'Hola'.Contains('a')
Ejemplo
'Hola'| Select-String 'o'
Enumeraciones
Ejemplo
Crear una variable de tipo complejo con las principales ciudades del mundo
enum Ciudades
{
Hannover
Madrid
Seattle
Barcelona
London
NewYork
}
function Seleccion-Ciudades
{
param ([Ciudades][Parameter(Mandatory=$true)]$Ciudad)
Write-Host "Has elegido la ciudad de $Ciudad"
}
Seleccion-Ciudades 3
![]()
Objetos
Los objetos, propiedades, métodos y eventos son las unidades básicas de la programación orientada a objetos. Un objeto es un elemento de una aplicación, que representa una instancia de una clase. Propiedades, métodos y eventos son las unidades de creación básicas de los objetos y constituyen sus miembros.
En PowerShell los cmdlets se tratan como objetos.
Ejemplo
Almacenar la ejecución de los cmdlets ls y ps y ver las propiedades y los métodos de cada variable
$variable=ls
$variable | Get-Member
$variableproce=ps
$variableproce | Get-Member
![]()
Algunas características de los objetos:
- Un objeto representa una instancia de una clase.
- Una propiedad es un atributo de un objeto que define una de las características del objeto, como tamaño, color o ubicación en pantalla, o un aspecto de su comportamiento.
- Un método es una acción que un objeto puede realizar.
- Un evento es una acción que un objeto reconoce, como hacer clic con el mouse (ratón) o presionar una tecla, y para el que puede escribir código para responder. Los eventos se producen como consecuencia de una acción del usuario o de código de programa, o bien pueden ser desencadenados por el sistema. También puede desarrollar eventos personalizados propios para que los generen sus objetos y los controlen otros objetos.
En PowerShell se pueden crear objetos y añadir propiedades y métodos a dichos objetos.
Crear un objeto
$objeto=New-Object Object
Añadir una propiedad a un objeto
Add-Member -MemberType NoteProperty -Name Nombre Valor -InputObject $objeto
Listar propiedades y métodos
$objeto | Get-Member
Ejemplo
Crear un objeto coche con propiedades y métodos
#Crear objeto coche
$coche=New-Object Object
#Añadir propiedad color de coche
Add-Member -MemberType NoteProperty -Name Color Negro -InputObject $coche
#Añadir método temperatura del motor
$coche | Add-Member ScriptMethod TemperaturaMotor {60}
#Mostrar el color del coche
$coche.color
#Mostrar la temperatura del motor
$coche.TemperaturaMotor()
En PowerShell se pueden crear clases y de las clases crear objetos.
En las clases se pueden definir además de lo dicho anteriormente también se pueden crear constructores dentro de las clases.
class Clase
{
[string]$Valor
Constructor([string]$Valor)
{
$this.Valor = $Valor
}
}
Ejemplo
Crear una clase con un constructor
class Coche
{
[string]$Marca
[string]$Modelo
#Constructor 1
Coche([string]$Marca, [string]$Modelo)
{
$this.Marca = $Marca
$this.Modelo = $Modelo
}
}
Crear el objeto para la clase creada
[Coche]::new("Audi","A3")
![]()
Los objetos en PowerShell se pueden sobrecargar, la sobrecarga se refiere a la posibilidad de tener dos o más funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o más funciones con el mismo nombre realizan acciones diferentes.
Ejemplo
Realizar sobrecargas en constructores de una clase
class Coche
{
[string]$Marca
[string]$Modelo
#Constructor 1
Coche([string]$Marca, [string]$Modelo)
{
$this.Marca = $Marca
$this.Modelo = $Modelo
}
#Constructor 2
Coche ([string]$Modelo)
{
$this.Marca = "NS"
$this.Modelo = $Modelo
}
#Constructor 3
Coche ()
{
$this.Marca = "No definido"
$this.Modelo = "No definido"
}
}
Ficheros
Las variables tienen el problema de ser temporales por eso necesitamos poder almacenar datos de forma permanente mediante los ficheros.
Ejemplo
Obtener el contenido de un archivo de texto
"Hi" | Out-File file.txt
Get-Content file.txt
Obtener las dos primeras líneas de un fichero
Get-Content .\fichero.txt -First 2
Obtener las dos últimas líneas de un fichero
Get-Content .\fichero.txt -Tail 2
Leer el contenido de un fichero en decimal
[System.IO.File]::ReadAllBytes('.\eje.txt')
Operaciones aritméticas
Con las variables se pueden realizar las siguientes operaciones aritméticas:
Ejemplo
Sumar dos números
$num1=5
$num2=6
$resultado=$num1+$num2
Write-Host "La suma del número $num1 y el número $num2 es: "+ $resultado
Ejemplo
Restar dos números
$num1=10
$num2=6
$resultado=$num1-$num2
Write-Host "La resta del número $num1 y el número $num2 es: "+ $resultado
Ejemplo
Multiplicar dos números
$num1=3
$num2=6
$resultado=$num1*$num2
Write-Host "La multiplicación del número $num1 y el número $num2 es: "+ $resultado
Ejemplo
Dividir dos números
$num1=10
$num2=5
$resultado=$num1/$num2
Write-Host "La división del número $num1 entre el número $num2 es: "+ $resultado
Ejemplo
Resto de la división de números
$num1=4
$num2=2
$resultado=$num1%$num2
Write-Host "El resto de dividir el número $num1 entre el número $num2 es: "+ $resultado
Ejercicio
Saber si un número es par o impar, pidiendo al usuario que introduzca el número con el cmdlet Read-Host
$numero=Read-Host ("Introduzca un número para saber si es par o impar")
if($numero % 2 -eq 0)
{
Write-Host "El número $numero es par"
}
else
{
Write-Host "El número $numero es impar"
}
Conversiones entre sistemas numéricos
Se pueden realizar conversiones entre sistemas de numeración.
Los sistemas numéricos están compuestos por símbolos y por las normas utilizadas para interpretar estos símbolos. El sistema numérico que se usa más a menudo es el sistema numérico decimal, o de Base 10. El sistema numérico que se usa más a menudo es el sistema numérico decimal, o de Base 10. El sistema numérico de Base 10 usa diez símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9. Estos símbolos se pueden combinar para representar todos los valores numéricos posibles.
Los ordenadores reconocen y procesan datos utilizando el sistema numérico binario, o de Base 2. El sistema numérico binario usa sólo dos símbolos, 0 y 1, en lugar de los diez símbolos que se utilizan en el sistema numérico decimal. La posición, o el lugar, que ocupa cada dígito de derecha a izquierda en el sistema numérico binario representa 2, el número de base, elevado a una potencia o exponente, comenzando desde 0. Estos valores posicionales son, de derecha a izquierda, 2 potencia 0, 2 potencia 1, 2 potencia 2, 2 potencia 3, 2 potencia 4, 2 potencia 5, 2 potencia 6 y 2 potencia 7, o sea, 1, 2, 4, 8, 16, 32, 64 y 128, respectivamente.
El inconveniente de la codificación binaria es que la representación de algunos números resulta muy larga. Por este motivo se utilizan otros sistemas de numeración que resulten más cómodos de escribir: el sistema octal y el sistema hexadecimal. Afortunadamente, resulta muy fácil convertir un número binario a octal o a hexadecimal.
Otro sistema utilizado es hexadecimal, el sistema hexadecimal usa dieciséis símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. Se utilizan los caracteres A, B, C, D, E y F representando las cantidades decimales 10, 11, 12, 13, 14 y 15 respectivamente, porque no hay dígitos mayores que 9 en el sistema decimal. Cada dígito tiene, naturalmente, un valor distinto dependiendo del lugar que ocupen. El valor de cada una de las posiciones viene determinado por las potencias de base 16.
Ejemplo
Convertir un número binario a decimal
$binario = "11111111"
[Convert]::ToInt32($binario,2)
Convertir un número decimal a octal
$decimal = 3232
[Convert]::ToString($decimal, 8)
Convertir un número decimal a hexadecimal
$decimal = 3232
[Convert]::ToString($decimal, 16)
Operaciones lógicas
Las operaciones lógicas son expresiones matemáticas cuyo resultado es un valor booleano (verdadero o falso true o false), algunas expresiones lógicas que se pueden realizar en PowerShell son:
Tabla lógica del operador and
x |
y |
resultado |
true |
true |
true |
true |
false |
false |
false |
true |
false |
false |
false |
false |
Ejemplo
Realizar operaciones con el operador lógico and
(1 -eq 1) -and (2 -eq 2)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 2) es True
#El resultado de juntar las dos operaciones es True ya que True y True es True
(1 -eq 2) -and (2 -eq 3)
#La primera operación de comparación (1 -eq 2) es False
#La segunda operación de comparación (2 -eq 3) es False
#El resultado de juntar las dos operaciones es False ya que False y False es False
(1 -eq 1) -and (2 -eq 3)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 3) es False
#El resultado de juntar las dos operaciones es False ya que True y False es False
Tabla lógica del operador or
x |
y |
resultado |
true |
true |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
Ejemplo
Realizar operaciones con el operador lógico or
(1 -eq 1) -or (2 -eq 2)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 2) es True
#El resultado de juntar las dos operaciones es True ya que True o True es True
(1 -eq 2) -or (2 -eq 3)
#La primera operación de comparación (1 -eq 2) es False
#La segunda operación de comparación (2 -eq 3) es False
#El resultado de juntar las dos operaciones es False ya que False o False es False
(1 -eq 1) -or (2 -eq 3)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 3) es False
#El resultado de juntar las dos operaciones es True ya que True o False es True
Tabla lógica del operador not
x |
resultado |
true |
false |
false |
true |
Ejemplo
Realizar operaciones con el operador lógico not
(1 -eq 1) -and -not (2 -eq 2)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 2) es Not True es decir False
#El resultado de juntar las dos operaciones es False ya que True y False es False
(1 -eq 2) -and -not (2 -eq 3)
#La primera operación de comparación (1 -eq 2) es False
#La segunda operación de comparación (2 -eq 3) es Not False es decir True
#El resultado de juntar las dos operaciones es False ya que False y True es False
(1 -eq 1) -and -not (2 -eq 3)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 3) es Not False es decir True
#El resultado de juntar las dos operaciones es False ya que True y True es True
(1 -eq 1) -or -not (2 -eq 2)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 2) es Not True es decir False
#El resultado de juntar las dos operaciones es True ya que True o False es True
(1 -eq 2) -or -not (2 -eq 3)
#La primera operación de comparación (1 -eq 2) es False
#La segunda operación de comparación (2 -eq 3) es Not False es decir True
#El resultado de juntar las dos operaciones es False ya que False o True es True
(1 -eq 1) -or -not (2 -eq 3)
#La primera operación de comparación (1 -eq 1) es True
#La segunda operación de comparación (2 -eq 3) es Not False es decir True
#El resultado de juntar las dos operaciones es True ya que True o True es True
Operaciones de comparación
Algunas operaciones de comparación que se pueden realizar en PowerShell son:
Ejemplo
Realizar operaciones con el operador de comparación eq
$numero=1
$resultado=$numero -eq 1
#El resultado es True, esto significa que el resultado es verdadero
Write-Host $resultado
$cadena='pepito'
$resultado=$cadena -eq 'pepito'
#El resultado es True
Write-Host $resultado
$cadena='pepito'
$resultado=$cadena -eq 'Pepito'
#El resultado es True
Write-Host $resultado
#En el caso de cadenas de caracteres cuando comparamos dos cadenas que tienen incluidas mayúsculas y minúsculas nos indica que son iguales, para diferenciar hay que utilizar:
#-ceq
$cadena='pepito'
$resultado=$cadena -ceq 'Pepito'
#El resultado es False porque no son iguales la 'p'y la 'P'
Write-Host $resultado
- lt (Less than -> Menos que)
Ejemplo
Realizar operaciones con el operador de comparación lt
$numero1=1
$numero2=2
$resultado=$numero1 -lt $numero2
#El resultado es True, esto significa que el resultado es verdadero y que el número 2 es menor que el número 1
Write-Host $resultado
$numero1=1
$numero2=2
$resultado=$numero2 -lt $numero1
#El resultado es False, esto significa que el resultado es falso y que el número 1 no es menor que el número 2
Write-Host $resultado
- gt (Greater than -> Más que)
Ejemplo
Realizar operaciones con el operador de comparación gt
$numero1=1
$numero2=2
$resultado=$numero1 -gt $numero2
#El resultado es False, esto significa que el resultado es falso y que el número 1 no es mayor que el número 2
Write-Host $resultado
$numero1=1
$numero2=2
$resultado=$numero2 -gt $numero1
#El resultado es True, esto significa que el resultado es verdadero y que el número 2 es mayor que el número 1
Write-Host $resultado
- ge (Greater than or Equal to -> Mayor o igual a)
Ejemplo
Realizar operaciones con el operador de comparación ge
$numero1=1
$numero2=2
$resultado=$numero1 -ge $numero2
#El resultado es False, esto significa que el resultado es falso y que el número 1 no es mayor o igual que el número 2
Write-Host $resultado
$numero1=1
$numero2=2
$resultado=$numero2 -ge $numero1
#El resultado es True, esto significa que el resultado es verdadero y que el número 2 es mayor que el número 1
Write-Host $resultado
$numero1=1
$numero2=1
$resultado=$numero2 -ge $numero1
#El resultado es True, esto significa que el resultado es verdadero y que el número 2 es igual que el número 1
Write-Host $resultado
- le (Less than or equal to – Menor o igual a)
Ejemplo
Realizar operaciones con el operador de comparación le
$numero1=1
$numero2=2
$resultado=$numero1 -le $numero2
#El resultado es True, esto significa que el resultado es verdadero y que el número 1 es menor o igual que el número 1
Write-Host $resultado
$numero1=1
$numero2=2
$resultado=$numero2 -le $numero1
#El resultado es False, esto significa que el resultado es falso y que el número 2 no es menor que el número 1
Write-Host $resultado
$numero1=1
$numero2=1
$resultado=$numero2 -le $numero1
#El resultado es True, esto significa que el resultado es verdadero y que el número 2 es igual que el número 1
Write-Host $resultado
- ne (Not equal to – No es igual a)
Ejemplo
Realizar operaciones con el operador de comparación ne
$numero=1
$resultado=$numero -ne 1
#El resultado es False, esto significa que es falso que el número 1 no sea igual al número 1
Write-Host $resultado
$cadena='pepito'
$resultado=$cadena -ne 'pepitos'
#El resultado es True porque pepito no es igual a pepitos
Write-Host $resultado
Sentencias condicionales
En programación, una sentencia condicional es una instrucción o grupo de instrucciones que se pueden ejecutar o no en función del valor de una condición, los tipos de sentencias condicionales son:
Ejemplo
Comprobar si un número es igual a otro utilizando if
$a=5
if($a -eq 5)
{
Write-Host “5”
}
Ejemplo
Comprobar si un número es igual a otro utilizando else
$a=5
if($a -eq 5)
{
Write-Host “5”
}
else
{
Write-Host “No 5”
}
Ejemplo
Comprobar si un número es igual a otro utilizando elseif
$a=6
if($a -eq 5)
{
Write-Host “5”
}
elseif($a -eq 6)
{
Write-Host “6”
}
else
{
Write-Host “No 5 o 6”
}
Ejemplo
Comprobar si un número es igual a otro utilizando switch
$a=5
switch($a){
5{
Write-Host “5”
break
}
6{
Write-Host “6”
break
}
7{
Write-Host “7”
break
}
}
Sentencias de repetición
Una estructura de repetición o bucle nos permite ejecutar un numero de veces determinado una serie de instrucciones, los tipos de sentencias de repetición son:
Ejemplo
Mostrar los números de 1 a 10 utilizando el bucle while
$i=1
while($i -lt 11){
$i
$i++
}
Ejemplos
Mostrar los números de 1 a 10 utilizando el bucle do-while
$i=1
do{
$i
$i++
}while($i -lt 11)
Ejemplos
Mostrar los números de 1 a 10 utilizando el bucle for
for($i=1;$i -lt 11;$i++)
{
$i
}
Ejemplo
Mostrar los números de 1 a 10 utilizando el bucle foreach
foreach($i in 1..10)
{
$i
}
Mostrar los números de 1 a 10 utilizando el bucle foreach abreviado
1..10 | % {$_}
Ejercicios
Recorrer de distintas formas de 1 a 3 con Foreach
#Forma 1
$numeros=1..3
#Forma 2
$numeros | %{$PSItem}
#Forma 3
$numeros | %{$_}
#Forma 4
foreach($numero in $numeros)
{
$numero
}
Funciones
Una función es un conjunto de líneas de código que realizan una tarea específica y puede retornar un valor.
Las funciones pueden tomar parámetros que modifiquen su funcionamiento.
Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comúnmente utilizadas durante un programa y de esta manera reducir la cantidad de código.
Cuando una función es invocada se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada.
El esquema de una función:
function funcion1
{
param
(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[String[]]
[AllowEmptyString()]
$Var,$Var2
)
begin
{
}
process
{
}
end
{
}
}
Ejemplos
Pedir a un usuario su nombre y mostrarlo mediante una función
function Get-Nombre
{
param
(
$Name = $(
Write-Host 'Introduzca su nombre: '-ForegroundColor Yellow -NoNewLine
Read-Host
)
)
"Tu nombre es: $Name"
}
#Ejecutar la función
Get-Nombre
Hacer un login creando una función que comprueba un nombre de usuario y una contraseña
function funcion5
{
param
(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[String[]]
[AllowEmptyString()]
$User,$Pass
)
begin
{
Write-Host "Principio de login"
$usercorrecto="Carlos"
$passcorrecto="Contraseña"
}
process
{
if($User -eq $usercorrecto -and $Pass -eq $passcorrecto)
{
$ok=1
}
else
{
$ok=0
}
}
end
{
if($ok)
{
Write-Host "User correcto"
}
else
{
Write-Host "User no correcto"
}
Write-Host "Fin de login"
}
}
#Ejecutar la función
funcion4 Carlos Contraseña
Hacer un login avanzado creando una función que comprueba un nombre de usuario y una contraseña
###############################################################################
#Función login de user y pass
#El user y pass (hash en MD5) correcto se escriben en el bloque BEGIN
#Ejecutar la función
#PS C:\Users\usuario>loginH user pass
function loginH
{
param
(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[String[]]
[AllowEmptyString()]
$User,$Pass
)
begin
{
Write-Host "Principio de login"
$usercorrecto="user"
#El pass en MD5
#$passcorrecto="pass"
$passcorrecto="1A1DC91C907325C69271DDF0C944BC72"
}
process
{
#Realizar el MD5 del pass introducido por el usuariO
[Reflection.Assembly]::LoadWithPartialName("System.Web")
$Pass
if($User -eq $usercorrecto -and [System.Web.Security.FormsAuthentication]::HashPasswordForStoringInConfigFile($Pass, "MD5") -eq $passcorrecto)
{
$ok=1
}
else
{
$ok=0
}
}
end
{
if($ok)
{
Write-Host "User correcto"
}
else
{
Write-Host "User no correcto"
}
Write-Host "Fin de login"
}
}
###############################################################################
The post 2. Programación en PowerShell appeared first on Scripting and security.