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 sonLocal、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_ENV
Otras extensiones