Búsqueda de sitios web

Tutorial de secuencias de comandos de Windows PowerShell para principiantes


Introducción

Windows PowerShell es una herramienta para la automatización de tareas y la gestión de configuración que combina un shell de línea de comandos con un lenguaje de secuencias de comandos. Los profesionales de TI confían en PowerShell para:

  • Automatizar tareas comunes
  • Administrar máquinas remotas
  • Compartir datos entre aplicaciones
  • Administrar la infraestructura como código

Aprender incluso algunos conjuntos básicos de comandos de Windows PowerShell y capacidades básicas de secuencias de comandos puede ayudarle a lograr una automatización significativa. Para ayudar, este tutorial de PowerShell cubre los conceptos básicos de secuencias de comandos de PowerShell para principiantes.

Precaución: Una vez que haya aprendido algunos conceptos básicos de PowerShell, será fácil comenzar a ejecutar comandos, pero pueden tener un impacto profundo en la estabilidad y seguridad de su ecosistema de TI. Cuando comience a utilizar PowerShell, asegúrese de experimentar con él únicamente en un entorno aislado.

Configurar su entorno PowerShell

Antes de poder ejecutar scripts de PowerShell, debe configurar el entorno de Windows PowerShell. Estos son los pasos a seguir.

Instalar PowerShell

PowerShell viene preinstalado en la mayoría de los sistemas operativos Windows. Sin embargo, si necesita instalar una versión más reciente, puede descargarla del sitio web de Microsoft o utilizar el Administrador de paquetes de Windows (Winget) o el Administrador de paquetes Chocolatey.

Ejecute PowerShell

Para iniciar la línea de comando de PowerShell, ingrese powershell.exe en el menú Inicio de Windows. Verás una pantalla como la siguiente:

Consulta la política de ejecución.

De forma predeterminada, PowerShell restringe la ejecución de scripts por motivos de seguridad. Puede verificar la configuración de su política ejecutando el comando Get-ExecutionPolicy:

Obtendrá uno de los siguientes valores:

  • Restringido: no se pueden ejecutar scripts de PowerShell. Esta es la configuración predeterminada.
  • AllSigned : puede ejecutar scripts de PowerShell firmados por un desarrollador de confianza.
  • RemoteSigned : puede ejecutar sus propios scripts o scripts firmados por un desarrollador de confianza.
  • Sin restricciones: puede ejecutar cualquier secuencia de comandos que desee.

Para cambiar la configuración de la política de ejecución, use el cmdlet Set-ExecutionPolicy:

Instalar módulos y paquetes.

Windows PowerShell se puede ampliar con módulos y paquetes adicionales del repositorio público de PowerShell Gallery u otras fuentes.

Puede utilizar el cmdlet Install-Module para instalar módulos directamente desde la Galería de PowerShell. Luego puede usar los cmdlets y las funciones definidas en el módulo como si fueran comandos integrados de PowerShell.

Los módulos más utilizados incluyen:

  • Directorio Activo
  • Servidor Microsoft Exchange
  • Directorio activo de Azure
  • Oficina 365 (M365)
  • servidor SQL
  • Servidor SharePoint
  • Servicios de Información de Internet

Para obtener una lista completa, ejecute este cmdlet:

Get-Module -ListAvailable

Cmdlets de PowerShell

PowerShell incluye una amplia gama de cmdlets (pronunciados "command-lets") para tareas administrativas comunes, como administrar procesos, servicios, archivos y usuarios. Cada uno realiza una única función, pero se pueden combinar en secuencias de comandos de PowerShell.

Los cmdlets tienen una estructura verbo-sustantivo, donde el verbo indica la acción que se va a realizar y el sustantivo especifica el objetivo de la acción, como Get-Help, Set-Item. , Iniciar-Servicio o Detener-Proceso. Otros verbos clave incluyen Out, que se usa para generar algo (como un archivo), y New, que se usa para crear algo (“nuevo” no es un verbo , por supuesto, pero funciona como tal).

Los cmdlets normalmente producen objetos como salida, lo que permite una fácil manipulación e integración con otros cmdlets y scripts.

Ejemplos de cmdlets de PowerShell

  • Get-Process: Obtiene la información sobre los procesos en ejecución del sistema.

  • Get-Service: Recupera el estado de los servicios en el sistema.

  • Get-ChildItem: Recupera una lista de archivos y carpetas en un directorio.

Alias de cmdlet

Muchos cmdlets tienen uno o más alias, que son versiones abreviadas de sus nombres. Por ejemplo, los dos comandos siguientes realizan la misma acción:

Start-Process notepad

start notepad

De manera similar, puede utilizar cualquiera de los siguientes comandos para detener el proceso del Bloc de notas:

Stop-Process -Name notepad

spps -Name notepad

Para ver todos los alias, ejecute el cmdlet Get-Alias:

Parámetros y argumentos del cmdlet

Los cmdlets aceptan parámetros que controlan su comportamiento. Los parámetros se especifican mediante un guión seguido del nombre del parámetro, como -Name o -Path.

Algunos parámetros aceptan argumentos, que son valores de un tipo de datos particular (los tipos de datos se explican a continuación).

Por ejemplo, aquí está la sintaxis del cmdlet Get-Process con sus parámetros en naranja y sus argumentos en verde:

Get-Process

[-Name <String[]>]
[-ComputerName <String[]>]
[-FileVersionInfo]
[-Module]
[-InputObject <Process[]>]
[-IncludeUserName] [-ExcludeUserName]
[-Credential <PSCredential>]
[-Id <Int32[]>]
[-IncludeTotalProcessorTime]
[-WhatIf]
[-Confirm]

Tipos de datos

A continuación se muestran algunos tipos de datos comunes en PowerShell:

  • Cadena: Una cadena es una secuencia de caracteres encerrados entre comillas simples (' ') o dobles (' '). Una cadena puede incluir letras, números, símbolos y espacios.
  • Entero: Los números enteros son números enteros sin partes decimales ni fraccionarias.
  • Doble: Los dobles son números de punto flotante con precisión decimal, como 3,14 o -0,5.
  • Booleano: Los booleanos se utilizan a menudo en comparaciones y expresiones condicionales. Los únicos valores posibles son verdadero y falso.
  • Hashtable: Una tabla hash es una colección de pares clave-valor. Cada clave en una tabla hash debe ser única. Las tablas hash se utilizan a menudo para almacenar y recuperar datos mediante claves con nombre.
  • Matriz: Una matriz es una colección de elementos ordenados e indexados del mismo tipo de datos, como un conjunto de nombres o números enteros. En PowerShell, puede crear una matriz asignando una lista de valores separados por comas entre paréntesis a una variable, como se muestra aquí:
$fruits = ("apple", "banana", "orange")

Para acceder a los elementos de una matriz, puede utilizar el operador de índice [n]. El índice del primer elemento de la matriz es 0. A continuación se muestra un ejemplo:

$fruits = ("apple", "banana", "orange")

Write-Host $fruits[0] # Output from first element: apple

Write-Host $fruits[1] # Output from second element: banana

Write-Host $fruits[2] # Output from third element: orange

Puedes modificar los elementos de una matriz asignando un nuevo valor a un índice:

$fruits = ("apple", "banana", "orange")

$fruits[1] = "grape"

Write-Host $fruits[1] # Output: grape

variables

Las variables se utilizan para almacenar y manipular datos en PowerShell. Una variable es un contenedor con nombre que contiene un valor, como una cadena, un número, una matriz u objetos. Las variables de PowerShell tienen tipos flexibles, lo que significa que no es necesario declarar el tipo de datos de una variable cuando le asigna un valor. El tipo de datos se determina dinámicamente en función del valor asignado.

Los nombres de variables en PowerShell se componen del símbolo $ seguido del nombre de la variable. Los nombres de las variables no distinguen entre mayúsculas y minúsculas, por lo que, por ejemplo, “$MyVariable” y “$myvariable” se refieren a la misma variable.

Cada variable tiene un alcance que determina dónde se puede acceder a ella: global, script, función o local. De forma predeterminada, las variables son locales en el ámbito en el que se crean.

Para asignar un valor a una variable, utilice el operador =, como se muestra en los dos ejemplos siguientes:

$myVariable = "Hello, World!"

$number = 42

Tubería

Los cmdlets se pueden conectar mediante el operador de canalización |, que pasa la salida de un cmdlet al siguiente cmdlet. Esto permite crear comandos de una línea para realizar operaciones complejas.

Por ejemplo, este comando utiliza una tubería para enviar la cadena especificada a un archivo:

"Hello, World!" | Out-File C:pstest.txt

Y el siguiente ejemplo obtiene todos los servicios y los ordena por su estado:

Get-Service | Sort-Object -property Status

Puede utilizar varias tuberías. Por ejemplo, aquí el primer comando obtiene todos los servicios, el segundo filtra solo los servicios en ejecución y el tercer comando limita la salida solo a sus nombres para mostrar:

Get-Service | WHERE {$_.status -eq "Running"} | SELECT displayname

Obteniendo ayuda

Puede utilizar Get-Help para ver detalles sobre cualquier cmdlet:

Para obtener ejemplos de un cmdlet, agregue el parámetro -Examples:

Get-Help Get-Process -Examples

Algunos cmdlets de uso común

Trabajar con archivos y carpetas

Puede utilizar PowerShell para simplificar tareas como crear, copiar, mover, eliminar y modificar propiedades de archivos y carpetas.

Al utilizar canalizaciones, lógica condicional y bucles, puede realizar tareas de manipulación de archivos y carpetas más complejas. Por ejemplo, puede usar el cmdlet Get-ChildItem para recuperar una lista de archivos en un directorio, filtrar los resultados usando el cmdlet Where-Object y luego usar Eliminar elemento para eliminar los archivos seleccionados.

A continuación se muestran algunos cmdlets de PowerShell comunes para trabajar con archivos y carpetas:

  • Get-ChildItem: Recupera una lista de archivos y carpetas en un directorio específico
  • Nuevo elemento: crea nuevos archivos y carpetas.
  • Copiar elemento: copia archivos y carpetas de una ubicación a otra
  • Mover elemento:mueve archivos y carpetas de una ubicación a otra.
  • Eliminar elemento: Eliminar archivos y carpetas
  • Set-Item: Modifica las propiedades de archivos y carpetas.
  • Test-Path: comprueba si un archivo o carpeta existe en una ruta especificada
  • Get-Content: recupera el contenido de un archivo y lo envía a la consola.
  • Establecer contenido: escribe contenido en un archivo, sobrescribiendo cualquier contenido existente.

Trabajar con fecha y hora

A continuación se muestran algunos cmdlets de PowerShell comunes para trabajar con fechas y horas.

  • Get-Date: utilice este cmdlet para recuperar la fecha y hora actuales. También puede usarlo para convertir cadenas en objetos DateTime y formatear fechas según patrones específicos.
  • Get-Date -Format: este cmdlet le permite recuperar la fecha y hora actuales del sistema en un formato específico. Por ejemplo, puede utilizar Get-Date -Format 'aaaa-mm-dd' para obtener la fecha en formato "AAAA-MM-DD".
  • Set-Date: este cmdlet le permite configurar la fecha y hora del sistema.
  • New-TimeSpan: este cmdlet se utiliza para calcular el lapso de tiempo entre dos fechas. Devuelve un objeto Timespan que representa la diferencia horaria, que se puede utilizar para realizar más cálculos o formatear.

A continuación se muestran algunos ejemplos de cómo puede trabajar con fechas y horas en PowerShell.

Para obtener la hora y fecha actuales:

$currentDateTime = Get-Date

Para crear un objeto DateTime para una fecha pasada específica:

$customDate = [DateTime]::Parse("2023-11-10")

Calcule el lapso de tiempo entre la fecha actual y una fecha pasada y guárdelo en la variable $timeDifference:

$timeDifference = New-TimeSpan -Start $currentDateTime -End $customDate

Imprime el valor de la variable $timeDifference:

Write-host $timeDifference

secuencias de comandos de PowerShell

Las secuencias de comandos de PowerShell son una forma poderosa de automatizar tareas, administrar sistemas y realizar diversas operaciones utilizando el lenguaje de secuencias de comandos de PowerShell.

Entorno de secuencias de comandos integrado (ISE) de PowerShell

El entorno de secuencias de comandos integrado integrado permite secuencias de comandos de PowerShell en una interfaz gráfica de usuario. Proporciona un potente conjunto de funciones para crear, editar, depurar y ejecutar scripts de PowerShell, incluida la edición multilínea, la finalización de tabulaciones, el coloreado de sintaxis, la ejecución selectiva y la ayuda contextual.

Muchas de las mismas acciones que puede realizar en la consola de Windows PowerShell están disponibles en elementos de menú y métodos abreviados de teclado. Por ejemplo, al depurar una secuencia de comandos en el entorno de secuencias de comandos integrado, puede hacer clic con el botón derecho en una línea de código en el panel de edición para establecer un punto de interrupción. Ya sea principiante o un usuario experimentado de PowerShell, PowerShell ISE puede optimizar sus flujos de trabajo y aumentar su productividad.

Para iniciar PowerShell ISE, ingrese powershell ise en el menú Inicio:

Los elementos clave de PowerShell ISE incluyen:

  • Barra de menú: La barra de menú ofrece menús desplegables para Archivo, Editar, Ver, Herramientas, Depurar, Complementos y Ayuda.
  • Barra de herramientas: La barra de herramientas debajo de la barra de Menús proporciona botones que realizan acciones como copiar, cortar, pegar, ejecutar script, ejecutar selección y detener operación.
  • Pestañas de secuencias de comandos: debajo de la barra de herramientas en la captura de pantalla anterior, puede ver varias pestañas. Cada uno es un espacio de trabajo para escribir y ejecutar un script de PowerShell. La ruta completa del archivo de secuencia de comandos se muestra en una información sobre herramientas cuando coloca el cursor del mouse en la pestaña de secuencia de comandos.
  • Barra de estado: en la parte inferior de la pantalla, debajo de la pestaña de secuencias de comandos, hay una barra de estado que muestra el estado de finalización de los comandos y secuencias de comandos que ha ejecutado y cualquier mensaje de error.
  • Panel de comandos: en el lado derecho de PowerShell ISE hay un panel que enumera todos los comandos disponibles.
  • Control deslizante de tamaño del texto: en la parte inferior derecha hay un control deslizante que puede utilizar para aumentar o disminuir el tamaño del texto en la pantalla.

Guiones de muestra

A continuación se muestra un ejemplo simple de un script de PowerShell que demuestra cómo definir variables, usar una declaración if-else e imprimir un mensaje en la consola de PowerShell.

# Define variables

$name = "Jennifer"

$age = 35

# Display a greeting based on the age

if ($age -ge 18) {

    Write-Host "Hello, $name! You are an adult."

} else {

    Write-Host "Hello, $name! You are a minor."

}

Aquí hay otro script de PowerShell simple; le pregunta al usuario su nombre y luego lo saluda:

# Prompt the user for their name

$name = Read-Host "Enter your name"

# Greet the user

Write-Host "Hello, $name! Welcome to PowerShell scripting."

Agregar comentarios a los scripts

Dejar comentarios en sus guiones le ayudará a usted y a sus colegas a comprender mejor lo que hacen. Un comentario de una línea comienza con un signo numérico (#) y un comentario de bloque comienza con “<#” y termina con “#>”.

Corchetes, paréntesis y llaves

En PowerShell, los delimitadores se utilizan para muchos propósitos, incluida la definición de matrices, el acceso a elementos, la agrupación de expresiones y la especificación de bloques de secuencias de comandos. Aquí hay algunos de los más comunes:

  • Corchetes: Los corchetes ([]) se utilizan para definir y acceder a elementos de una matriz.
$fruits = @("apple", "banana", "orange")

Write-Host $fruits[0]  # Output: apple
  • Paréntesis: Los paréntesis se utilizan ampliamente en PowerShell, como para pasar argumentos, encerrar múltiples conjuntos de instrucciones o resolver ambigüedades. El operador $() se utiliza cuando necesita anidar paréntesis en un comando.
$result = $("The result is: " + (2 + 3))

Write-Host $result #Output: The result is: 5
  • Llaves: Las llaves ({}) se utilizan para definir bloques de script, que se utilizan en estructuras de control como bucles y declaraciones condicionales (que se describen a continuación), así como con cmdlets como ForEach-Object y Dónde-Objeto. Por ejemplo:
$numbers = @(1, 2, 3, 4, 5)

$filtered = $numbers | Where-Object { $_ -gt 3 }

Write-Host $filtered  # Output: 4 5

Bucles

Los bucles se utilizan en los scripts de PowerShell para repetir un bloque de código varias veces. Estos son los tipos de bucles más comunes:

  • Bucle For: Se utiliza para ejecutar un bloque de código varias veces según los factores especificados. A continuación se muestra un ejemplo que ejecutará una declaración de escritura 5 veces:
for ($i = 1; $i -le 5; $i++) {

Write-Host "Iteration $i"

}

  • Ciclo ForEach: itera a través de los elementos de una colección, como una matriz o un conjunto de objetos, y ejecuta el código para cada uno. He aquí un ejemplo:
$colors = "Red", "Green", "Blue"

foreach ($color in $colors) {

       Write-Host "Color: $color"

}

  • Bucle while: Ejecuta un bloque de código siempre que se cumpla una determinada condición. A continuación se muestra un ejemplo.
$i = 1

while ($i -le 5) {

    Write-Host "Iteration $i"

    $i++

}

  • Bucle Do-While: Similar a un bucle " while", pero garantiza que el bloque de código se ejecute al menos una vez antes de que se verifique la condición. He aquí un ejemplo:
$i = 1

do {

    Write-Host "Iteration $i"

    $i++

} while ($i -le 5)

Condiciones

Las condiciones se utilizan para controlar el flujo de scripts de PowerShell. Aquí hay algunas declaraciones condicionales en PowerShell:

  • Instrucción If: Ejecuta el código si (y sólo si) la condición especificada es verdadera. He aquí un ejemplo:
$num = 10

if ($num -gt 5) {

    Write-Host "The number is greater than 5"

}

  • Declaración If-else: extiende la declaración "if" proporcionando un bloque de código para ejecutar si la condición no es verdadera. He aquí un ejemplo:
$num = 3

if ($num -gt 5) {

    Write-Host "The number is greater than 5"

}

else {

    Write-Host "The number is not greater than 5"

}

  • Declaración Else-if: permite especificar múltiples condiciones que se verificarán en secuencia en lugar de solo dos. He aquí un ejemplo:
$num = 5

if ($num -gt 5) {

    Write-Host "The number is greater than 5"

}

elseif ($num -eq 5) {

    Write-Host "The number is equal to 5"

}

else {

    Write-Host "The number is less than 5"

}

Resumen del tutorial de secuencias de comandos de PowerShell

Este tutorial cubrió todos los conceptos básicos de PowerShell, desde cómo instalar y configurar PowerShell hasta ejecutar comandos comunes y escribir scripts de PowerShell más complejos. Tenga en cuenta que si olvida algo, siempre puede utilizar el cmdlet Get-Help.

Recursos adicionales

Scripts útiles de PowerShell

Administrar usuarios de AD

  • Enumerar todas las cuentas de usuario en un sistema Windows
  • Crear nuevos usuarios de Active Directory
  • Descubra nuevos usuarios de AD
  • Informe sobre la membresía del grupo AD
  • Encuentra usuarios de AD discapacitados
  • Listar cuentas de usuario de AD caducadas
  • Encuentre cuentas de usuario de AD bloqueadas
  • Recibir notificaciones sobre contraseñas caducadas
  • Configure las contraseñas de usuario para que nunca caduquen en Office 365

Administrar computadoras AD

  • Crear, eliminar, cambiar el nombre, deshabilitar y unir computadoras en AD
  • Listar computadoras inactivas en Active Directory

Administrar grupos y unidades organizativas

  • Recibir notificaciones sobre cambios en el grupo de administradores locales
  • Agregar y eliminar grupos AD y objetos en grupos
  • Administrar unidades organizativas y sus objetos

Administrar otras cosas

  • Supervisar registros de eventos
  • Consultar registros de eventos
  • Reenviar registros de eventos en Windows Server 2008
  • Administrar listas de control de acceso (ACL) del sistema de archivos
  • Agiliza la gestión de archivos

Guía avanzada de secuencias de comandos de PowerShell

  • Sepa cuándo usar Windows PowerShell y cuándo usar el símbolo del sistema
  • Atajos de teclado maestros para administradores de sistemas
  • Aprenda a automatizar scripts de PowerShell con el Programador de tareas
  • Obtenga más información sobre el uso de variables y matrices.

Otros recursos

  • Introducción a PowerShell

Preguntas frecuentes de Microsoft

¿Es difícil aprender PowerShell?

Comenzar a utilizar Microsoft PowerShell puede ser realmente fácil, ya que el lenguaje es sencillo y puedes obtener información sobre cualquier cmdlet fácilmente. Pero también es esencial comprender los sistemas con los que interactúa, para que sus scripts no provoquen problemas graves, como tiempos de inactividad del sistema o incidentes de seguridad.

¿Dónde empiezo a aprender PowerShell?

Recomendamos el tutorial de secuencias de comandos de Windows PowerShell para principiantes. Cubre los conceptos básicos de las secuencias de comandos de PowerShell, incluido cómo ejecutar secuencias de comandos de PowerShell y utilizar los comandos de PowerShell más comunes. Otra buena fuente es la página de PowerShell en el sitio web de Microsoft, que incluye un sólido curso introductorio.

Artículos relacionados