Estructuras de control de PowerShell
Las estructuras de control son el "cerebro" de un programa: determinan bajo qué condiciones se ejecuta el código, si se repite, y cómo manejar errores con elegancia.
Como lenguaje de scripting moderno, PowerShell proporciona una sintaxis completa de control de flujo, que incluye:
- Declaraciones condicionales:
if、elseif、else、switch - Estructuras de bucle:
for、foreach、while、do-while - Mecanismo de manejo de errores:
try-catch-finally
1. Declaraciones condicionales
if / elseif / else
Sintaxis básica:
if (条件1) {
# 条件1为真执行
} elseif (条件2) {
# 条件2为真执行
} else {
# 其他情况
}
Ejemplo: determinar si el espacio en disco es insuficiente
$disk = Get-PSDrive C
if ($disk.Free -lt 5GB) {
Write-Output "磁盘空间不足!"
} elseif ($disk.Free -lt 10GB) {
Write-Output "磁盘空间偏低。"
} else {
Write-Output "磁盘空间充足。"
}
switch
Cuando hay múltiples valores posibles a evaluar,switchen lugar de múltiplesifes más claro.
switch ($value) {
"start" { Write-Output "开始任务" }
"stop" { Write-Output "停止任务" }
"exit" { Write-Output "退出程序" }
default { Write-Output "未知命令" }
}
Admite coincidencia de patrones:
switch -Wildcard ($filename) {
"*.txt" { "文本文件" }
"*.jpg" { "图片文件" }
default { "其他类型" }
}
2. Estructuras de bucle
forBucle (conteo clásico)
for ($i = 1; $i -le 5; $i++) {
Write-Output "第 $i 次"
}
foreachBucle (recorrido de colecciones)
$names = "张三", "李四", "王五"
foreach ($name in $names) {
Write-Output "你好,$name"
}
También se puede usarForEach-ObjectVersión con tubería:
$names | ForEach-Object { Write-Output "你好,$_" }
whileBucle (ejecutar mientras sea verdadero)
$count = 0
while ($count -lt 3) {
Write-Output "计数:$count"
$count++
}
do-whileydo-until
doEl buclese ejecuta al menos una vez:
$count = 0
do {
Write-Output "当前值:$count"
$count++
} while ($count -lt 3)
do-until: no se detiene hasta que la condición sea verdadera
$count = 0
do {
Write-Output "当前值:$count"
$count++
} until ($count -ge 3)
3. Manejo de errores: try / catch / finally
PowerShell proporciona un mecanismo estructurado de manejo de excepciones para capturar y responder a errores en tiempo de ejecución.
3.1 Estructura básica
try {
# 尝试运行可能出错的代码
}
catch {
# 错误时执行
}
finally {
# 无论是否出错,都会执行(可选)
}
Ejemplo: manejar error de división por cero
try {
$result = 10 / 0
}
catch {
Write-Output "发生错误:$($_.Exception.Message)"
}
finally {
Write-Output "运算结束"
}
Capturar tipos de excepción específicos
try {
Get-Content "不存在的文件.txt"
}
catch [System.IO.FileNotFoundException] {
Write-Output "文件未找到!"
}
catch {
Write-Output "其他错误:$($_.Exception.Message)"
}
De forma predeterminada, algunos comandos solo imprimen errores y no entran encatch. En este caso, es necesario agregar el parámetro:
Remove-Item "不存在的文件.txt" -ErrorAction Stop
o establecer una política global:
$ErrorActionPreference = "Stop"
4. Resumen
| Estructura de control | Función | Escenario de aplicación |
|---|---|---|
if / else |
Evaluar una o más condiciones | Evaluar disco, estado, etc. |
switch |
Evaluación de múltiples ramas (coincidencia de valores o patrones) | Análisis de comandos, clasificación |
for |
Iteración de número finito de veces | Número de iteraciones definido |
foreach |
Recorrer matrices o colecciones | Listas de usuarios, listas de archivos, etc. |
while |
Ejecutar mientras la condición sea verdadera | Esperar cierto estado o cambio |
do-while |
Se ejecuta al menos una vez | Verificación inicial + mecanismo de reintento |
try-catch |
Capturar errores de ejecución para evitar que el script se interrumpa | Operaciones de archivos, solicitudes de red, etc. |
finally |
Operaciones finales como limpiar recursos, imprimir registros, etc. | Garantizar que cierto bloque de código se ejecute siempre |
5. Tareas de práctica
Tarea 1: Determinar si un número es par o impar
$number = 7
if ($number % 2 -eq 0) {
"偶数"
} else {
"奇数"
}
Tarea 2: Recorrer una matriz e imprimir la longitud de cada elemento
$items = "apple", "banana", "cherry"
foreach ($item in $items) {
"$item 的长度是 $($item.Length)"
}
Tarea 3: Manejar errores de lectura de archivos
try {
Get-Content "D:\not-exist.txt"
}
catch {
"文件读取失败:" + $_.Exception.Message
}
Otras extensiones