d4redevil
  • whoami
  • Active Directory
    • Enumeración
    • PowerShell para gestionar Active Directory
    • PowerView & SharpView
    • Ataques a Kerberos
    • Ataque de contraseñas
    • SMB Relay
    • Token Impersonation
    • Golden Ticket
    • LLMNR Poisoning
    • Mimikatz
    • Grupos privilegiados
    • LAPS
  • Linux
    • Enumeración
    • Escalación de privilegios
    • Transferencia de Archivos
  • Windows
    • Enumeración
    • Escalación de privilegios
      • SeImporsonate
      • SeDebugPrivilege
      • SeTakeOwnershipPrivilege
      • Backup Operators
      • DnsAdmins
    • Transferencia de Archivos
  • Scripting
    • Powershell
      • Introducción
      • Cmdlet
      • Alias
      • Comentarios
      • Comandos utiles
      • Variables
      • Tuberías (Pipes)
      • Operaciones
      • Estructuras Condicionales
  • OWASP TOP 10 y Vulnerabilidades Web
    • Inyecciones SQL
      • ¿Qué son las Inyecciones SQL?
      • Laboratorio
      • Inyecciones SQL basada en Uniones
      • Inyecciones SQL basadas en booleanos
      • Inyecciones SQL basadas en tiempo
  • Writeups
    • Hack The Box
      • Linux
        • 🟢Easy
        • 🟡Medium
          • Zipping
        • 🔴Hard
        • ⚫Insane
      • Windows
        • 🟢Easy
          • Devel
          • Grandpa
          • Granny
          • Jerry
          • Optimum
          • Legacy
          • Active
          • Sauna
        • 🟡Medium
        • 🔴Hard
        • ⚫Insane
    • The Hackers Labs
      • Linux
        • 🟢Principiante
          • Papaya
          • Can You Hack Me?
        • 🟡Avanzado
          • Runners
          • El Candidato
          • El Cliente
        • 🔴Profesional
        • ⚫Experto
          • ⚫Thlcppt_v16
      • Windows
        • 🟢Principiante
          • Cocido Andaluz
          • Ensalá Papas
        • 🟡Avanzado
        • 🔴Profesional
          • BlackGold
        • ⚫Experto
    • Dockerlabs
      • 🔵Muy fácil
      • 🟡Fácil
      • 🟠Medio
        • Database
      • 🔴Difícil
    • VulnHub
      • Linux
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
      • Windows
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
    • HackMyVM
      • Linux
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
        • ⚫Insane
      • Windows
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
        • ⚫Insane
  • Servicios Comunes
    • TCP
    • UDP
    • FTP (21)
    • SMB (445)
    • MySQL (3306)
    • MSSQL (1433)
  • Cheatsheet
    • Reconocimiento
    • Enumeración
    • Enumeración Web
    • Enumeración de CMS
    • Fuerza Bruta
    • Pivoting
    • Msfvenom
    • Utilidades
    • Fuerza bruta
    • Transferencia de Archivos
  • Contenedores
    • Docker
Con tecnología de GitBook
En esta página
  • ¿Qué es una variable?
  • Números
  • Cadenas
  • Booleanos
  • Char
  • Casteo de Tipos
  • Casteo explícito usando [type]
  • Cmdlet [Convert]
  • Cosas a considerar sobre el casteo de tipos
  • Referencias
  1. Scripting
  2. Powershell

Variables

AnteriorComandos utilesSiguienteTuberías (Pipes)

Última actualización hace 5 meses

Continuando con la serie de artículos de Powershell, toca hablar de las variables. Para lo que debemos definir en primer lugar qué es una variable.

¿Qué es una variable?

Cuando hablamos de una variable en programación, nos referimos a un espacio de almacenamiento que permite guardar datos que pueden cambiar durante la ejecución de un programa. Cada variable tiene un nombre único y un tipo de dato asociado (como por ejemplo, números, texto, etc), lo que permite manipular esos valores en diversas operaciones a lo largo del código.

Lo primero que aprenderemos será a definir una variable. Para definir una variable en PowerShell, debemos utilizar el simbolo $ seguido del nombre de la variable.

$name = "Dean"
$age = 30

Es importante tener en cuenta que el nombre de la variable, es el identificador de esta. Puede ser cualquier nombre valido, excluyendo espacios y que no debe comenzar con una letra o guion bajo.

Como mencionamos en la definición de variable, además de un nombre que las identifica, las variables tiene asociado un tipo de variable. En Powershell, las variables pueden contener diferentes tipos de datos.

Números

Si queremos definir una variable numerica (Integer, Float, Decimal) podemos hacerlo de la siguiente manera:

$number = 10
$decimal = 13.51

Podemos observar, que a diferencia de otros lenguajes de programación en Powershell no es necesario indicar de forma explicita el tipo de dato, ya que este se determina en base al valor asignado.

Cadenas

Por otra parte tenemos el tipo de dato cadena de texto (String), el cual almacena secuencias de caracteres. Podemos utilizar tanto comillas dobles como simples.

$name = "Sam"

Como las cadenas son una secuencia de caracteres, podemos acceder a los caracteres individuales.

Supongamos que tenemos la siguiente variable:

$string = "PowerShell"

Si queremos obtener el primer caracter (letra P) lo haremos de la siguiente manera:

echo $string[0]

El indice 0 (cero), representa el primer valor, en este caso, la letra P.

El segundo valor, letra o se encuentra en el indice 1.

echo $string[1]

El ultimo caracter letra l se encuentra en el indice 9.

echo $string[9]

También podemos obtener un slice o una parte de la cadena.

Si queremos conocer la cantidad de caracteres que tiene la cadena, podemos utilizar la propiedad Length.

echo $string.Length

Booleanos

Este tipo de dato almacena valores True o False.

$isActive = $true

Es importante destacar el valor asignado, el cual es $true y no true. Ya que si asignamos el valor true obtendremos un error.

Las variables $true y $false, son consideradas varaibles especiales y representan los valores booleanos.

Si queremos conocer el tipo de dato de una variable, podemos utilizar el método GetType:

$number.GetType()
$decimal.GetType()
$name.GetType()
$isActive.GetType()

Char

Si queremos guardar un solo caracter en una variable y que sea considerada como char, podemos hacerlo de la siguiente forma:

$char_A = [char]'A'

Casteo de Tipos

Como mencionamos anteriormente, PowerShell no es un lenguaje de tipado estricto, lo que significa que no es necesario definir explícitamente el tipo de un objeto al crear uno. Esto proporciona flexibilidad, ya que puedes convertir fácilmente entre diferentes tipos de datos, como de cadenas a números, de cadenas a fechas, o entre otros tipos compatibles.

En PowerShell, todo es un objeto. Sin embargo, no tienes que especificar de antemano el tipo exacto de objeto que deseas utilizar; PowerShell maneja automáticamente las conversiones y la creación de objetos según sea necesario, lo que facilita la manipulación de datos de manera más fluida y dinámica.

El casteo de tipos en PowerShell se refiere al proceso de convertir un valor de un tipo de dato a otro, como de una cadena de texto a un número o viceversa.

Existen dos tipos de casteo, el casteo implícito, el cual maneja de forma automática algunas conversiones de tipo en función del contexto, como convertir de un número a una cadena si se concatena con texto. Por otra parte, existe el casteo explícito, el cual permite convertir un tipo de dato de forma explícita utilizando el operador de tipo [type] o el cmdlet [convert].

Casteo explícito usando [type]

Sintaxis:

[type]$value

Convertir de cadena a entero

$stringValue = "2025"
$intValue = [int]$stringValue

Convertir de cadena a flotante

$stringValue = "30.55"
$floatValue = [float]$stringValue

Convertir de número a cadena

$number = 1234
$stringValue = [string]$number

Convertir de número a booleano

$intValue = 1
$boolValue = [bool]$intValue

Cmdlet [Convert]

Convertir a un valor booleano usando [Convert]::ToBoolean.

$stringValue = "True"
$boolValue = [Convert]::ToBoolean($value)

Convertir un número a cadena usando [Convert]::ToString

$intValue = 2025
$stringValue = [Convert]::ToString($value)

Cosas a considerar sobre el casteo de tipos

Si intentas hacer una conversión que no es válida (por ejemplo, convertir una cadena de texto que no puede representarse como un número), PowerShell lanzará un error.

Por ejemplo, si intetamos realizar la siguiente conversión:

$stringValue = "xyz"
$intValue = [int]$string

Algunas conversiones son más fáciles que otras. Por ejemplo, convertir entre tipos numéricos (como de int a float) es sencillo, pero convertir texto a número solo funciona si el texto tiene un formato numérico válido.

Los valores null se pueden convertir a cualquier tipo sin errores, pero al convertirlos a números o booleanos, se asigna un valor predeterminado (0 para números, False para booleanos).

Ahora que comprendemos cómo definir variables y manipular los diferentes tipos de datos, en el próximo artículo exploraremos las operaciones que se pueden realizar con las variables.


Referencias

about_Variables