PowerShell: variables y ámbito
Las variables son herramientas fundamentales en cualquier lenguaje de programación, y PowerShell no es la excepción.
Podemos usar variables para almacenar números, cadenas, objetos, matrices, tablas hash... Lo que realmente hace poderosas a las variables de PowerShell es su mecanismo de ámbito. Comprender el ámbito te permitirá escribir scripts más estables y con una estructura más clara, evitando conflictos de variables o sobrescrituras accidentales.
Esta sección te llevará a comprender en profundidad el uso de variables en PowerShell, los tipos de datos, las reglas de ámbito y las mejores prácticas.
1. Fundamentos de las variables
Definir variables
En PowerShell, las variables comienzan con el signo de dólar ($) y van seguidas del nombre de la variable.
$greeting = "Hello, PowerShell" $number = 100
La asignación de variables no requiere declarar el tipo de antemano; PowerShell infiere automáticamente el tipo de dato.
Leer variables
Simplemente se hace referencia a la variable para leer su valor:
Write-Output $greeting
También se puede insertar en una cadena:
Write-Output "提示信息:$greeting"
Si la cadena usa comillas simples, la variable no se interpretará:
Write-Output '提示信息:$greeting' # 输出字面值
Ver el tipo de variable
$number.GetType()
Ejemplos de tipos de variables comunes
| Ejemplo | Tipo | Valor de ejemplo |
|---|---|---|
$str = "abc" |
Cadena (String) | "abc" |
$num = 123 |
Entero (Int32) | 123 |
$arr = 1, 2, 3 |
Matriz (Array) | [1, 2, 3] |
$obj = Get-Process |
Colección de objetos (Object[]) | Lista de procesos |
$hashtable = @{} |
Tabla hash (Hashtable) | @{Name="Tom";Age=30} |
2. Variables especiales
PowerShell predefine muchas variables integradas útiles:
| Nombre de variable | Descripción |
|---|---|
$_ |
Objeto que se está procesando actualmente en la canalización |
$? |
Si el comando anterior se ejecutó correctamente |
$LASTEXITCODE |
Código de salida del último programa externo |
$PSVersionTable |
Información de versión de PowerShell |
$env:PATH |
Variable de entorno PATH |
3. Concepto de ámbito de variables
¿Qué es el ámbito?
Ámbito (Scope)Se refiere a dónde es válida una variable. PowerShell admite múltiples niveles de ámbito para garantizar que las variables no se sobrescriban inadvertidamente.
Los ámbitos comunes incluyen:
| Ámbito | Descripción |
|---|---|
Global |
Ámbito global: el ámbito de nivel superior del script o del shell |
Local |
Variables en la función o bloque de código actual (ámbito predeterminado) |
Script |
Variables válidas en el archivo de script actual |
Private |
Válido en el ámbito actual, inaccesible desde fuera |
Ejemplo: diferencias de ámbito de variables
$global:name = "Tom" # 全局变量
$name = "Alice" # 本地变量
function Show-Name {
$name = "Bob" # 函数内的局部变量
Write-Output "函数内部:$name"
}
Show-Name
Write-Output "函数外部:$name"
Write-Output "全局变量:$global:name"
Resultado:
函数内部:Bob 函数外部:Alice 全局变量:Tom
Establecer el ámbito explícitamente
Puedes anteponer un identificador de ámbito al nombre de la variable para definir claramente su visibilidad:
$script:dbName = "MyDatabase" # 仅对当前脚本可见 $global:apiKey = "abcdef12345" # 对所有位置可用
Ver las variables del ámbito actual
Get-Variable
O listar variables globales:
Get-Variable -Scope Global
4. Errores comunes y precauciones
| Situación problemática | Causa y recomendación |
|---|---|
| Las variables definidas dentro de una función no son accesibles desde fuera | No se utilizaglobal:oscript:declaración explícita |
| Variables con el mismo nombre se sobrescriben | Se recomienda usar prefijos de ámbito para distinguir variables importantes |
| Los cambios en variables de entorno no surten efecto | Por favor use$env:para modificar, y preste atención al ámbito y la persistencia. |
5. Ejemplos prácticos
Ejemplo 1: Crear una función y usar una variable global como configuración
$global:Threshold = 80
function Check-CPU {
$usage = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples[0].CookedValue
if ($usage -gt $global:Threshold) {
Write-Output "CPU 使用率过高:$([math]::Round($usage, 2))%"
} else {
Write-Output "CPU 使用率正常:$([math]::Round($usage, 2))%"
}
}
Ejemplo 2: Definir una variable en una función que no sea visible desde fuera (ámbito local)
function Say-Hello {
$message = "你好,PowerShell!"
Write-Output $message
}
Say-Hello
Write-Output $message # 报错:$message 不存在
Ejemplo 3: Usar$env:Establecer una variable de entorno (temporal)
$env:MY_ENV = "HelloWorld" Write-Output $env:MY_ENV
Nota: Este método solo es válido en la sesión actual de PowerShell; deja de funcionar al cerrar la ventana.
6. Resumen
- PowerShell usa
$nombre de variablepara definir variables, con inferencia automática de tipo - Puede almacenar cualquier tipo de dato, incluyendo cadenas, matrices, tablas hash, objetos, etc.
- El ámbito controla el "alcance de vida" de una variable; los más comunes son
Local、Script、Global - Comprender correctamente el ámbito ayuda a escribir scripts con una estructura clara y fácil de mantener.
- Las variables integradas y las variables de entorno son muy útiles, pero hay que tener en cuenta sus limitaciones de ámbito.
7. Tareas de práctica
Tarea 1: Definir una variable de cadena$titley generar su salida:
$title = "PowerShell 学习之旅" Write-Output $title
Tarea 2: Definir una variable dentro de una función e intentar acceder a ella desde fuera
function Set-Message {
$msg = "来自函数"
Write-Output $msg
}
Set-Message
Write-Output $msg # 查看是否能访问
Tarea 3: Establecer y leer una variable de entornoAPP_ENV
$env:APP_ENV = "Development" Write-Output $env:APP_ENVOtras extensiones