Cómo usar las variables de PowerShell
Oct 4, 2018
Las variables de PowerShell actúan como contenedores para datos que pueden ser creados, modificados y utilizados en scripts o sesiones. Soportan múltiples tipos, incluyendo cadenas de texto, enteros, arreglos y tablas de hash, y pueden tener un alcance local, global o basado en scripts. Los administradores pueden establecer descripciones, visibilidad y opciones, listar o limpiar variables, y exportar sus contenidos. El uso adecuado de variables simplifica la automatización y la eficiencia de los scripts.
Introducción
Una variable en PowerShell es un contenedor al que se le asigna un valor. Piense en ellas como cajas nombradas donde puede colocar información para usar más tarde. El valor de una variable se puede acceder simplemente haciendo referencia a la variable, y se puede cambiar en cualquier momento reasignando la variable con un nuevo valor. Las variables son muy útiles para realizar un seguimiento de los datos en scripts o durante una sesión de PowerShell.
Ejemplos de variables de PowerShell
Sumergámonos en algunas de las formas más útiles de utilizar variables en PowerShell.
Crear y establecer variables en PowerShell
Los nombres de variables en PowerShell comienzan con un signo de dólar ($), y no son sensibles a mayúsculas y minúsculas, así que, por ejemplo, $VAR y $var se refieren a la misma variable. Un nombre de variable puede contener letras, números y guiones bajos. Aunque pueden contener espacios y otros caracteres especiales, es mejor evitarlos.
Una vez que hayas elegido un nombre para una variable en PowerShell, puedes crearla y asignarle un valor en un solo comando. Por ejemplo, si quieres crear una variable llamada $Greeting y asignarle el valor de cadena Hello, World, utilizarías este comando:
$Greeting = "Hello, World"
Después de este comando, cada vez que escriba $Greeting, PowerShell sustituirá el valor que asignó a esa variable, como se muestra a continuación.
Las comillas dobles (“ ”) en el ejemplo anterior indican que el valor es una cadena. Aquí te mostramos cómo puedes crear una variable y asignarle un valor entero:
$var1 = 75
$var2 = 25
Puede realizar operaciones aritméticas con variables numéricas, como se muestra aquí:
También puedes combinar cadenas utilizando el signo más (+) como operador:
$var10 = “Complete”
$var11 = “Visibility
$var12 = $var10 + $var11
Si agregas un número a un texto, el número se convierte automáticamente en texto:
$var1 = “Netwrix”
$var2 = 2023
Establecer o verificar el tipo de una variable
Las variables en PowerShell pueden almacenar múltiples tipos de datos, incluyendo cadenas, enteros y objetos más complejos como arreglos. Cuando asignas un valor a una variable, PowerShell determina automáticamente el tipo de dato basado en el valor. Esto se conoce como tipado dinámico. Como se mencionó anteriormente, las cadenas requieren comillas.
Aquí hay algunos ejemplos:
$var1 = "Hello" # The type of $var1 is String
$var2 = 25 # The type of $var2 is Integer
$var3 = Get-Date # The type of $var3 is DateTime
Para averiguar de qué tipo es una variable, utilizamos el parámetro GetType:
$var5 = “Netwrix”
$var5.GetType () .FullName
Los tipos de variables más comunes incluyen los siguientes:
- Cadena: Texto (puedes declarar una cadena encerrando el texto entre comillas)
- Entero: Un número entero
- Doble: Un número que incluye un punto decimal
- Boolean: Un valor de verdad, ya sea $True o $False
- DateTime: Una fecha y hora
- Array: Una estructura de datos que contiene una colección de elementos del mismo tipo o de diferentes tipos. Los elementos se almacenan secuencialmente y se pueden acceder mediante un índice. Aquí hay un ejemplo de cómo declarar un array:
$myArray = "apple", "orange", "cherry"
- HashTable: Una estructura de datos que comprende una colección desordenada de pares clave-valor. Es como un diccionario donde usas una clave única para almacenar y recuperar cada valor. Esto hace que las tablas hash sean excelentes para búsquedas y escenarios donde necesitas buscar valores fácilmente. Para crear una tabla hash, usas @{}. Dentro de las llaves, especificas cada par como la clave seguida de un signo igual (=) y luego el valor, como se ilustra en este ejemplo:
$myHashtable = @{
"Fruit1" = "Apple"
"Fruit2" = "Orange"
"Fruit3" = "Cherry"
}
Definir el alcance de una variable
El alcance es la visibilidad y accesibilidad de una variable. PowerShell tiene varios alcances diferentes:
- Local — El alcance actual
- Global —El ámbito que está en efecto cuando PowerShell inicia o cuando creas una nueva sesión o espacio de ejecución
- Script — El ámbito que se crea mientras se ejecuta un script
Las variables se especifican en PowerShell de la siguiente manera:
$global:Var1 = "Global Variable"
$script:Var2 = "Script Variable"
$local:Var3 = "Local Variable"
Automatice tareas con Netwrix Directory Manager
Simplifique la gestión de grupos y automatice tareas sin scripts complejos de PowerShell
Variables públicas vs. privadas
La propiedad de Visibility de una variable está relacionada con el alcance; determina si puedes ver el elemento fuera del script en el que fue creado. La propiedad de Visibility puede tener un valor de Public o Private. Las variables Private solo se pueden ver y cambiar en el alcance en el que fueron creadas. Las variables Public son accesibles desde cualquier alcance.
Listar (Obtener) Variables en el Ámbito Actual
Puede listar todas las variables actuales en una sesión de PowerShell utilizando el cmdlet Get-Variable, que recupera todas las variables en el ámbito actual. El ejemplo a continuación enumera algunas de las variables utilizadas en ejemplos anteriores.
Imprimir una Variable
Puede generar una variable en un archivo .txt, .csv o HTML.
Para escribir en un archivo .txt, utilice el comando Out-File :
$var5 = “Hello World”
$var5 | Out-File c:scriptsHello_World.txt
Para exportar datos a un archivo .csv, utilice el comando Export-Csv :
$var6 = Get-Process
$var6 | SELECT Name, Path | Export-Csv -Path c:scriptsprocesses.csv
Y para escribir en un archivo HTML, utilice el comando ConvertTo-Html:
$var6 = Get-Process
$var6 | ConvertTo-HTML -Property Name, Path>C:scriptprocesses.html
Para leer un archivo que exportaste, utiliza el cmdlet Get-Content:
Get-Content c:\scripts\processes.csv
Borrar una Variable
El cmdlet Clear-Variable se utiliza para eliminar el valor de una variable pero deja el objeto de la variable en sí. Cuando se limpia una variable, la variable sigue existiendo, pero su valor es $null. En el ejemplo a continuación, se crea una variable y luego se limpia, confirmando cada acción.
Eliminar una variable
El cmdlet Remove-Variable se utiliza para eliminar una variable y su valor.
En el ejemplo a continuación, se crea una variable llamada Example y se le asigna la cadena “¡Hola Mundo!”. Luego, la variable se elimina con el cmdlet Remove-Variable. Después, el script verifica la variable y devuelve un error porque ya no existe.
Tenga en cuenta que el cmdlet Remove-Variable solo elimina la variable en el ámbito actual. Si hay una variable con el mismo nombre en un ámbito superior, esa variable no se verá afectada. De manera similar, el cmdlet Remove-Variable no afecta a ningún ámbito secundario que pueda contener una variable con el mismo nombre.
La diferencia entre los comandos Clear-Variable y Remove-Variable es que limpiar la variable elimina solo el valor de la variable, mientras que eliminarla borra la variable en sí.
Parámetros
Los cmdlets discutidos anteriormente toman varios parámetros. Revisemos los parámetros más útiles y cómo funcionan.
Descripción
PowerShell variables have a Description property that you can set using the Set-Variable cmdlet with the Description parameter:
Set-Variable -Name "myVariable" -Description "This is my sample variable"
Excluir
Para excluir ciertas variables cuando estás utilizando el cmdlet Get-Variable, usa el parámetro Exclude y especifica los nombres de las variables a excluir. En el ejemplo a continuación, creamos 4 variables. Luego utilizamos el comando Get-Variable -Exclude para excluir dos de ellas.
$Var1 = "Test1"
$Var2 = "Test2"
$Var3 = "Test3"
$OtherVar = "Other"
Get-Variable -Exclude Var1, OtherVar
(Para incluir solo variables específicas, utilice el parámetro Name como se describe a continuación.)
Fuerza
Puede utilizar el parámetro Force con algunos comandos, como Set-Variable y Remove-Variable, para anular cualquier restricción que pueda impedir que el comando se complete.
Por ejemplo, normalmente cualquier intento de cambiar el valor de una variable de solo lectura resultará en un error, como se muestra a continuación:
Sin embargo, puedes anular este comportamiento con el parámetro Force:
Nombre
Puede usar el parámetro Name para referirse a una variable por su nombre sin el signo de dólar. En particular, puede usarlo para obtener solo las variables cuyos nombres coincidan con un patrón específico. Por ejemplo, utilizando el cmdlet a continuación, puede recuperar solo las variables cuyos nombres comiencen con “Net”:
Get-Variable -Name "NET*"
El asterisco (*) es un carácter comodín que representa cualquier número de caracteres adicionales.
Opción
Puede especificar el parámetro Option con el cmdlet Set-Variable. Los valores disponibles para este parámetro incluyen:
- Ninguno (predeterminado): La variable se comporta como una variable normal.
- ReadOnly: La variable no se puede cambiar ni eliminar.
- Constante: La variable no se puede cambiar ni eliminar, ni siquiera con el parámetro Force.
- Privado: La variable solo está disponible en el ámbito actual.
- AllScope: La variable se copia a cualquier nuevo ámbito que se cree.
Un ejemplo de la opción ReadOnly se muestra aquí:
PassThru
Por defecto, la mayoría de los cmdlets que realizan una acción (como Set-Variable, New-Item y Remove-Item) no generan ninguna salida; simplemente completan la acción en silencio. Sin embargo, si utilizas el parámetro PassThru, el cmdlet generará un objeto que representa el elemento que manipulaste con el cmdlet.
Aquí hay un ejemplo de uso de PassThru con Set-Variable:
WhatIf
Puede utilizar el parámetro WhatIf en cmdlets que realizan cambios, como Set-Variable, Remove-Variable o Clear-Variable, para ver qué sucedería si ejecutara el cmdlet, sin realizar ningún cambio real. Esto es útil si no está seguro de lo que haría un cmdlet. A continuación se muestra un ejemplo:
Conclusión
Con un sólido entendimiento de cómo se pueden crear y manipular las variables de PowerShell, puedes crear scripts de PowerShell para asistirte en la automatización de tareas, administración de sistemas, desarrollo de software y más.
Cómo Netwrix puede ayudar
¿Necesita asegurar su Active Directory y el entorno de Entra ID (Azure AD) de manera más eficiente y efectiva? Considere Netwrix Directory Manager. Sus capacidades automatizadas de gestión de grupos y usuarios reducen el riesgo de violaciones de datos mientras eliminan las tareas administrativas manuales que consumen tiempo.
Netwrix Directory Manager le otorga el poder de:
- Automatice la provisión y desprovisión de usuarios desde su sistema de información de recursos humanos (HRIS) hacia Active Directory, Entra ID y aplicaciones habilitadas para SCIM, permitiendo así que los nuevos empleados sean productivos rápidamente y reduciendo el riesgo de que adversarios tomen control de identidades obsoletas.
- Actualice automáticamente los grupos de directorios basándose en cambios como la promoción de un empleado o su cambio a otro rol, según se registra en su HRIS. Esta automatización mantiene los derechos de acceso actualizados en tiempo casi real según lo requerido para la seguridad y el cumplimiento, al mismo tiempo que ahorra tiempo al equipo de TI.
- Delegue la gestión de grupos y usuarios a las personas que saben quién debe tener acceso a qué. Flujos de trabajo sencillos permiten a los propietarios de líneas de negocio revisar sus grupos y aprobar o denegar solicitudes de acceso de usuarios, reduciendo el riesgo de tener grupos y usuarios con demasiados privilegios en su directorio.
- Mantenga el directorio limpio y más fácil de gestionar con la creación, expiración y eliminación automáticas de usuarios.
- Mantenga y demuestre el cumplimiento de las regulaciones y estándares con una visión profunda, automatización efectiva e informes claros sobre grupos y miembros.
Tutorial de Windows PowerShell Scripting para Principiantes
Aprende másCompartir en
Aprende más
Acerca del autor
Jonathan Blackwell
Jefe de Desarrollo de Software
Desde 2012, Jonathan Blackwell, un ingeniero e innovador, ha proporcionado liderazgo en ingeniería que ha colocado a Netwrix GroupID a la vanguardia de la gestión de grupos y usuarios para entornos de Active Directory y Azure AD. Su experiencia en desarrollo, marketing y ventas permite a Jonathan comprender completamente el mercado de Identity Management y la forma de pensar de los compradores.