PowerShell y todo lo que necesitas saber sobre esta utilidad

¿Qué pasaría si su PC pudiese encargarse de las tareas aburridas por usted? Con Windows PowerShell, esto es posible. Aquí se explica cómo utilizar PowerShell para automatizar tareas diarias repetitivas que nadie quiere hacer una y otra vez.

Tabla de contenido

¿Qué es PowerShell?

Microsoft PowerShell es una utilidad de línea de comandos y un lenguaje de scripting que constituye una poderosa herramienta para administradores y que le permite automatizar una amplia gama de tareas para computadoras y redes. PowerShell contiene componentes del símbolo del sistema y está construido sobre el marco .NET. Si está leyendo sobre WebTech360, entonces necesita saber que PowerShell es la herramienta preferida por los administradores de TI para administrar redes grandes.

Aprender a utilizar PowerShell simplificará muchas tareas cotidianas tediosas. También puede realizar cambios en todo el sistema a través de la red sin tener que ajustar individualmente cada servidor. PowerShell se está convirtiendo en una parte esencial de la ejecución de entornos de nube híbrida .

PowerShell tiene muchos usos diferentes para ayudarle a trabajar de manera más eficiente y mantener su red funcionando eficientemente. Los usos más básicos incluyen: programar actualizaciones diarias de los sistemas, generar informes para los procesos actuales, servicios periódicos y más. Es cierto que muchas de estas tareas se pueden realizar a través de la GUI, pero el objetivo de PowerShell es hacerlas más rápido.

Si tiene una tarea de mantenimiento regular que demora unos minutos en configurarse, puede crear un script con la misma funcionalidad en un único comando de PowerShell con nombre. Entonces la próxima vez simplemente abra ese script y se ejecutará en segundo plano. Dominar la lógica de scripting de PowerShell, comprender cómo funcionan los objetos y las variables e implementarlo de manera inteligente en su red le hará preguntarse por qué no utilizó PowerShell antes.

Este tutorial cubrirá los conceptos básicos de PowerShell, lo que será útil para aquellos nuevos en TI, especialmente si están familiarizados con el Símbolo del sistema de Windows. El artículo presentará cómo utilizar herramientas y comandos básicos, cómo manipular archivos y carpetas, comprender objetos, utilizar variables y administrar servidores remotos.

Una breve historia de las utilidades de línea de comandos de Windows

Después del lanzamiento de Windows NT, CMD.EXE se convirtió en la utilidad de línea de comandos para Windows. Aunque CMD.EXE heredó algunos componentes de su predecesor DOS (COMMAN.COM), todavía se basaba en un lenguaje de scripting bastante “primitivo”: el uso de archivos de comandos de Windows (.CMD y .BAT). La adición de Windows Scripting Host y los lenguajes VBScript y JScript mejoró enormemente las capacidades de scripting de la utilidad.

Estas tecnologías son una combinación bien equilibrada de utilidades de línea de comandos avanzadas y entornos de scripting. En realidad, la cuestión de cuántos archivos CMD.EXE, .CMD y Windows Scripting Host se pueden manipular no es la preocupación real. Lo que más preocupa y queja a la gente es completar algunas tareas aparentemente sencillas.

Utilizando el “marco” de la línea de comandos y herramientas de scripting, cualquier script moderadamente completo requiere una combinación de comandos por lotes, Windows Scripting Host y ejecutables independientes. Cada script utiliza diferentes convenciones para la ejecución, solicitud, análisis y devolución de datos.

El soporte débil de variables en CMD.EXE, las interfaces inconsistentes y el acceso limitado a la configuración de Windows, combinados con otra debilidad, hacen que los scripts de línea de comandos sean más difíciles de implementar y usar. Quizás te preguntes, ¿cuál es la “otra debilidad” aquí? Tenga en cuenta que es texto simple. En estas tecnologías, todo está en formato de texto. La salida de un comando o script es texto y debe analizarse y reformatearse para que actúe como entrada para el siguiente comando. Este es el punto de partida básico que PowerShell toma de todos los shells tradicionales.

Presentación de herramientas, comandos y módulos de PowerShell

Los tres conceptos presentados en esta sección son solo los conceptos básicos para comprender los conceptos clave que forman la base de PowerShell. Necesitará dedicar más tiempo a aprender y dominar conceptos más avanzados al abordar los comandos de PowerShell.

Herramientas de PowerShell

PowerShell se instala de forma predeterminada en Windows 10, Windows 7, Windows Server 2008 R2 y versiones más nuevas de Windows. Las nuevas versiones de PowerShell agregan nuevas características y "cmdlets" (término de Microsoft para los comandos de PowerShell, pronunciado "command-lets") y se instalan con la versión correspondiente de Windows Management Framework (WMF).

Actualmente WMF 5.1 es la última versión recomendada. En algunos casos, algunas características nuevas dependen del sistema operativo además de la versión de WMF. Por ejemplo, Windows 8 y Windows Server 2012 admiten el cmdlet Test-NetConnection, que permite probar la conectividad a un puerto TCP/IP específico , pero este cmdlet no está disponible en Windows 7 incluso cuando se ejecuta la última versión de WMF.

En la mayoría de los sistemas Windows, los usuarios tendrán dos entornos de PowerShell disponibles: la consola de PowerShell y el ISE (entorno de scripting integrado) de PowerShell. La consola de PowerShell parece una línea de comandos tradicional, pero con toda la funcionalidad de PowerShell detrás de ella. Los nombres de variables, bucles, autocompletado de comandos y canalización están disponibles en la consola de PowerShell.

Para usos más avanzados (como la creación de scripts), PowerShell ISE proporciona autocompletado de comandos, resaltado de código y capacidades de finalización de código Intellisense de Microsoft para ayudarlo a crear y probar código de PowerShell. PowerShell ISE también le permite trabajar con múltiples scripts de PowerShell simultáneamente mediante la navegación con pestañas.

cmdlets en PowerShell

La base de los comandos de PowerShell es el cmdlet. Microsoft adoptó varias estrategias de diseño al crear cmdlets en PowerShell.

La primera es la capacidad de inferir fácilmente los nombres de los cmdlets o, al menos, hacerlos más fáciles de descubrir. Los comandos o cmdlets de PowerShell también están diseñados para ser más fáciles de usar, con una sintaxis estandarizada, lo que facilita la creación de scripts desde la interfaz de la línea de comandos.

Los cmdlets utilizan el formato verbo-sustantivo como en Get-Service, Stop-Service o Import-Csv. La parte verbal del nombre de un cmdlet indica la acción realizada sobre el sustantivo. Normalmente, los cmdlets utilizados para recuperar información tendrán el verbo Get en su nombre, como Get-Process o Get-Content . El comando utilizado para editar algo generalmente comienza con el verbo Set , para agregar una nueva entidad en algún lugar generalmente comienza con Add o New .

En segundo lugar, los parámetros comúnmente utilizados en PowerShell también reciben nombres estandarizados. Por ejemplo, el parámetro -ComputerName permite que el cmdlet se ejecute en una o más computadoras remotas. -Credential se utiliza para proporcionar un objeto de autenticación, que contiene credenciales de usuario, para ejecutar un comando como un usuario específico.

Módulos en PowerShell

Puede utilizar alias tanto para cmdlets como para parámetros para ahorrar pulsaciones de teclas, acortando la longitud total del comando (muy útil cuando está encadenando varios comandos). Si bien estos alias no siempre utilizan convenciones de nombres estándar, aún reflejan utilidades de línea de comandos tradicionales.

En PowerShell, los alias como DIR, CD, DEL y CLS corresponden a los cmdlets Get-ChildItem, Set-Location, Remove-Item y Clear-Host, respectivamente. Los alias de parámetros pueden funcionar de dos maneras: pueden utilizar un alias predefinido proporcionado por el cmdlet o pueden crearse ingresando suficientes caracteres para crear una coincidencia única entre los parámetros admitidos del cmdlet.

Gestión de archivos y carpetas

La mayoría de los administradores de sistemas tienen que manipular archivos y carpetas en el curso de su trabajo, ya sea moviendo una carpeta a otra ubicación en el servidor, archivando archivos de registro o buscando archivos grandes. En caso de que las mismas operaciones se repitan en muchos archivos, utilizar PowerShell para automatizarlas será una solución eficaz para ahorrar tiempo.

Para encontrar archivos y directorios, una de las primeras herramientas de línea de comandos que un administrador aprendería en los viejos tiempos de la informática era el comando dir. Dir enumerará los archivos y directorios contenidos en el directorio especificado.

PowerShell tiene un comando similar en forma de cmdlet Get-ChildItem . Get-ChildItem le permite crear rápidamente una lista de archivos en un directorio de tal manera que pueda manipular los archivos a través de un comando de tubería o asignar la salida a una variable.

Get-ChildItem se puede utilizar simplemente proporcionando una ruta, ya sea a través de la canalización, utilizando el parámetro -Path o justo después del nombre del cmdlet. Para ajustar la respuesta devuelta por Get-ChildItem, es necesario considerar algunos parámetros puestos a disposición por el cmdlet.

El parámetro -Filter es una forma de buscar archivos. De forma predeterminada, Get-ChildItem solo devuelve elementos secundarios directos del directorio de destino. Esta funcionalidad se puede ampliar utilizando la opción adicional -Recurse , que busca recursivamente los directorios contenidos en el directorio actual.

En PowerShell 4.0, Get-ChildItem agregó la capacidad de limitar los resultados a archivos o directorios usando el modificador –File o –Directory . Las versiones anteriores de PowerShell tenían que pasar el resultado a Where-Object, filtrando la propiedad PSIsContainer para tomar esta determinación. A continuación se muestra un ejemplo de ambas técnicas utilizadas para devolver las carpetas contenidas en C:Users:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

Para detectar archivos ocultos o de sistema, se debe utilizar  -Force . Get-ChildItem en PowerShell 4.0 y versiones posteriores también se puede usar para devolver solo archivos ocultos, de solo lectura o de sistema usando -Hidden, -ReadOnly y –System respectivamente. Se podría lograr una funcionalidad similar en versiones anteriores filtrando la propiedad Mode usando Where-Object:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

Comprobar si el archivo existe

Normalmente, cuando trabajamos con archivos, todo lo que necesitamos saber es si el archivo existe o si la ruta del directorio es válida. PowerShell proporciona un cmdlet para hacer esto en forma de Test-Path, que devuelve un valor verdadero o falso.

Test-Path se utiliza como medida de precaución antes de intentar copiar o eliminar un archivo específico.

Copiar, mover y eliminar archivos

Copy-Item: copia uno o más archivos o directorios desde una ubicación, especificada por el parámetro -Path, a la ubicación especificada por la opción -Destination.

Mover elemento: mover un archivo o carpeta.

Cuando se copian o mueven estructuras de directorio, se debe utilizar -Recurse para que el cmdlet realice la acción en el directorio y su contenido. En algunos casos, es necesario -Force , como cuando se sobrescribe un archivo de solo lectura mediante una operación de copia.

Remove-Item: eliminar archivo, carpeta.

Se debe utilizar el modificador -Force cuando se encuentra un archivo de solo lectura y se debe utilizar -Recurse cuando se elimina un directorio y su contenido.

Uso de PowerShell -WhatIf y -Confirm

Antes de realizar cualquier eliminación masiva seria, utilice -WhatIf . -WhatIf le permite ver qué sucedería si se ejecuta un script o comando, ¿tendría algún impacto negativo potencial en eliminar datos comerciales importantes? También vale la pena señalar que -WhatIf no se limita a las operaciones de archivos, se usa ampliamente en PowerShell.

Para los scripts que desea ejecutar manualmente o peor aún, que tienen comandos dependientes que se ejecutan manualmente, considere usar -Confirm . Esto le permite solicitar la interacción del usuario antes de que la acción realmente se lleve a cabo.

Scripts de PowerShell = Archivos por lotes con esteroides

PowerShell en sí está escrito en el lenguaje .NET y se basa en gran medida en .NET Framework. Es por eso que PowerShell fue diseñado como una utilidad orientada a objetos y un lenguaje de scripting. Todo en PowerShell se trata como un objeto .NET Framework completamente funcional. Un comando que proporciona un conjunto de objetos que pueden usarse utilizando las propiedades y métodos de ese tipo de objeto. Cuando desea transferir la salida de un comando a otro, PowerShell en realidad pasa el objeto, no solo la salida de texto de la primera línea de comando. Esto le otorga al siguiente comando acceso completo a todas las propiedades y métodos del objeto en la canalización.

Tratar todo como un objeto y la capacidad de aceptar objetos entre comandos es un gran cambio teórico para las utilidades de línea de comandos. Dicho esto, PowerShell todavía funciona como una utilidad de shell tradicional. Se pueden escribir y ejecutar comandos, scripts y ejecutables desde la línea de comandos y los resultados se muestran en formato de texto. Los archivos .CMD y .BAT de Windows, VBScripts, JScripts y ejecutables que se ejecutan dentro de CMD.EXE todavía se ejecutan en PowerShell. Sin embargo, debido a que no están orientados a objetos, no tienen acceso completo a los objetos creados y utilizados en PowerShell. Estos scripts y ejecuciones heredados seguirán tratando todo como texto, pero puedes combinar PowerShell con otras tecnologías. Este es un punto muy importante si desea comenzar a usar PowerShell con una colección de scripts existentes que no se pueden convertir todos a la vez.

Explicación de los parámetros de PowerShell

Los cmdlets pueden aceptar parámetros para cambiar su comportamiento. Al ejecutar un cmdlet o una función, puede proporcionar valores de parámetros para especificar qué, cuándo, dónde y cómo se ejecuta cada comando de PowerShell.

Por ejemplo, Get-Process recuperará y enumerará todos los procesos que se ejecutan en su sistema operativo:

PowerShell y todo lo que necesitas saber sobre esta utilidad
Get-Process enumera todos los procesos en ejecución.

¿Pero qué pasa si solo deseas obtener un progreso específico? Puedes hacerlo usando parámetros. Por ejemplo, para obtener todos los procesos de Slack, puede usar el parámetro Nombre con el cmdlet Get-Process:

Get-Process -Name Slack

Entonces solo verás procesos llamados "slack":

PowerShell y todo lo que necesitas saber sobre esta utilidad
Uso de Get-Process con parámetros

Consejo : algunos parámetros son "posicionales", lo que significa que sus nombres son opcionales. En este caso, Get-Process -Name Slack y Get-Process Slack realizan la misma tarea.

Cada cmdlet aceptará diferentes tipos de parámetros. Utilice el comando Get-Help para ver los parámetros aceptados del cmdlet en la sección SINTAXIS.

Get-Help Get-Process

Verá una lista de todas las formas posibles en que puede ejecutar el cmdlet indicado:

PowerShell y todo lo que necesitas saber sobre esta utilidad
parámetros de sintaxis del cmdlet

En este caso, el cmdlet Get-Process acepta parámetros como Nombre, Id, ComputerName, Módulo, FileVersionInfo y otros parámetros comunes. Los símbolos aquí significan:

Símbolo

Nombre

Significado

 

Tambor

El parámetro no acepta entrada

-

Guión

Especificar el nombre del parámetro

<>

llaves

Marcador de posición para texto

[]

paréntesis

El parámetro puede aceptar uno o más valores.

{}

llaves

El parámetro acepta un conjunto de valores.

Los parámetros aceptan un conjunto de valores que indicarán el tipo de datos que requieren, como cadena, entero, booleano o DateTime. Por ejemplo, el siguiente comando:

Get-Process [[-Name] ]

... significa que el parámetro Nombre acepta uno o más valores de cadena, mientras que este comando:

Get-Process -Id 

... significa que el parámetro Id acepta uno o más valores enteros.

El ejemplo Get-Process anterior utilizó el parámetro Nombre para limitar los resultados. Sin embargo, si desea limitarlo a un proceso más específico, puede utilizar el parámetro ID , que requiere un número entero como se indica en su sintaxis.

Get-Process -Id 3016

Luego verás solo un proceso en la lista:

PowerShell y todo lo que necesitas saber sobre esta utilidad
Uso del parámetro Id en cmdlets

Crear canalización

PowerShell trata todos los datos como objetos. Para crear un script, estos objetos se ejecutan a través de una serie de cmdlets o funciones conectados por el símbolo de tubería (|). Elegir los cmdlets correctos y conectarlos en una secuencia lógica mediante una canalización es importante para un script eficiente.

Digamos que está creando un script para ordenar y mostrar los 5 archivos principales que ocupan más espacio en una carpeta. Hay formas más potentes de crear un script de ordenación de archivos, pero la siguiente es sencilla y fácil de entender:

PowerShell y todo lo que necesitas saber sobre esta utilidad
Ordenar archivos grandes (PS1)

Para hacer esto en PowerShell, use una canalización que se parezca a esto:

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

Guardar la canalización como script PS1

Ahora que tenemos un pipeline en funcionamiento, puedes guardarlo como un archivo de script PS1 para no tener que importarlo cada vez que lo uses.

La forma más sencilla de crear un archivo PS1 es pegar el script en el Bloc de notas y guardar el archivo con la extensión .ps1.

PowerShell y todo lo que necesitas saber sobre esta utilidad
Crear un script con el Bloc de notas

Una vez que haya creado el archivo PS1, puede usarlo en PowerShell ejecutando ./ScriptName.ps1 :

PowerShell y todo lo que necesitas saber sobre esta utilidad
Usando el script PS1

Consejo : si recibe un error de permisos, la solución más rápida es ejecutar PowerShell con derechos de administrador al ejecutar su script.

¡Felicidades! Ahora puedes crear un script PS1 de PowerShell.

Ejemplo de un script de PowerShell

¡Leer y comprender las maravillas de la nueva tecnología es una cosa, pero utilizarla realmente es otra! En el resto de este artículo, desarrollaremos un script de PowerShell para demostrar sus capacidades y uso.

DIR es uno de los comandos más comunes en CMD.EXE . Este comando muestra todos los archivos y subdirectorios contenidos en un directorio principal (como se muestra en la Figura 1). Junto con el nombre de cada objeto, la información proporcionada también incluye la fecha y hora de la última actualización y el tamaño de cada archivo. DIR también muestra el tamaño combinado de todos los archivos del directorio, así como el número total de archivos y el total de subdirectorios.

PowerShell y todo lo que necesitas saber sobre esta utilidad
Figura 1

Ejecutar DIR en PowerShell también produce una lista de directorios como la Figura 2, pero es un poco diferente. PowerShell no tiene un comando DIR, sino que tiene Get-ChildItem, que realiza la misma función. En PowerShell, DIR es un alias de Get-ChildItem. No tengo intención de entrar en alias en esta publicación. Puedes pensar en DIR en PowerShell como una abreviatura de Get-ChildItem.

DIR en PowerShell proporciona gran parte de la misma información que la mencionada anteriormente: una lista de archivos y carpetas, la fecha y hora en que se actualizaron por última vez y el tamaño de cada archivo. Sin embargo, carece de la información de resumen que proporciona DIR en CMD.EXE: tamaño total de todos los archivos en el directorio, número total de archivos y número total de subdirectorios.

PowerShell y todo lo que necesitas saber sobre esta utilidad
Figura 2

Para el escenario de ejemplo, necesitará crear un script de PowerShell que simule el comando CMD.EXE DIR. A continuación explicaré las partes más esenciales de un guión.

DIR.PS1: Encabezado

Un script de PowerShell consta de comandos de PowerShell en un archivo de texto sin formato con la extensión .PS1. En lugar de DIR, utilizará un archivo de texto llamado DIR.PS1.

Para ejecutar el script, escriba el siguiente comando en la pantalla de PowerShell:

.DIR.PS1 X:Folder

Donde X es la letra de la partición de la unidad (como C, D, E) y Carpeta es el nombre de la carpeta.

Si desea conocer alguna información sobre la partición de la unidad, deberá utilizar el Instrumental de administración de Windows (WMI). Los detalles de WMI están más allá del alcance de este artículo, por lo que no los cubriremos aquí. Pero el código de PowerShell a continuación también es bastante fácil de entender sin la necesidad de la ayuda de WMI. Puede crear una variable “$filter” para usar con el comando Get-WmiObject. Esta variable de filtro le dice al comando Get-WmiObject que solo desea información sobre una unidad específica. El resultado del comando Get-WmiObject se almacena en una variable llamada $volInfo. Recuerde, en PowerShell todo es un objeto; $volInfo ahora también es un objeto de resultado devuelto por Get-WmiObject.

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

Ahora puede acceder a todos los objetos y métodos asociados con el objeto. Se puede acceder al número de serie del volumen a través de la propiedad VolumeSerialNumber. La información devuelta es una cadena de 8 caracteres. Pero lo normal es que quieras formatearlo como cuatro números separados, separados por un guion. Se puede hacer de manera similar a la línea siguiente. El guion al final de la primera línea es el carácter de continuación de línea en PowerShell. Básicamente, solo le dice a PowerShell que la línea no está rota sino que incluye la siguiente línea. Al escribir código no es necesario separar líneas, pero para reducir el ancho y hacer que el código sea más fácil de leer, debes hacer esto.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

Ahora que tiene el objeto $volInfo, puede escribir la información del encabezado DIR en la pantalla. Si la unidad no tiene nombre, el texto escrito en la pantalla será ligeramente diferente que si la unidad tuviera un nombre. Se utiliza una declaración If-Else simple para verificar si la propiedad VolumeName es una cadena vacía o no. El comando Write-Host se utiliza para escribir líneas de comando individuales en la pantalla.

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

El carácter “`n” al principio y al final del comando Write-Host se utiliza para insertar nuevas líneas antes y después del texto. El comando Write-Host agrega una nueva línea al final de cada línea. Entonces, el efecto de “`n” es crear líneas en blanco antes y después de la línea de texto.

¿Has notado el “-eq” en el comando If? Es un operador de comparación de igualdad. La siguiente tabla le mostrará todos los operadores de comparación:

-eq, -ieq Comparar por
-ne, -ine La comparación no es igual
-gt, -igt Comparar mayor que
-ge, -ige Comparar mayor o igual a
-lt, -ilt Comparar más pequeño que
-le, -ile Comparar menor o igual a

El carácter -i antes de los operadores de comparación indica que el operador no distingue entre mayúsculas y minúsculas.

PowerShell y todo lo que necesitas saber sobre esta utilidad
Figura 3: Datos de salida del script que tienes actualmente

DIR.PS1: Lista de archivos/carpetas

Ahora está listo para mostrar el contenido y las propiedades de esta carpeta. Lo primero que debemos hacer es llamar al comando Get-ChildItem de PowerShell para obtener un conjunto de archivos y pasarlos al script como parámetro. El comando Get-ChildItem recuperará una colección de objetos de archivos y carpetas, no solo sus nombres, sino que también canalizará estos objetos directamente al comando Sort-Object para ordenarlos. De forma predeterminada, el comando Ordenar-Objeto ordenará los objetos según la propiedad Nombre. Por lo tanto no es necesario describir ningún otro parámetro. Luego, el conjunto ordenado de objetos se almacenará en una variable llamada $items.

$items = Get-ChildItem $args[0] | Sort-Object

Una vez que tenga una colección de objetos de archivos y carpetas, deberá recorrerlos y mostrar las características apropiadas. El comando utilizado para esto es ForEach. Para cada archivo o carpeta, las características mostradas serán la fecha y hora de la última actualización, el nombre, la longitud o el tamaño del archivo. Las cadenas de aspecto extraño dentro de los paréntesis son códigos de formato de cadena .NET. Se utilizan para alinear campos a la izquierda o a la derecha y formatear fechas, horas y números. Comprender estos códigos de formato de cadena no es muy importante, ya que no son esenciales para la naturaleza de este script.

El comando If es donde se determina si un objeto es un directorio o no. Si el primer carácter del atributo Mode es “d”, el objeto es un directorio. Es necesario verificar dos veces porque el código escrito para directorios suele ser diferente del código escrito para archivos.

Observe la línea $totalDirs++ dentro de la declaración If. Este es el contador encargado de realizar el seguimiento del número de carpetas. De manera similar, existe una variable $totalFiles que se utiliza para realizar un seguimiento del tamaño total de todos los archivos. Estos valores siempre se calculan durante la ejecución. Pero sólo se muestran cuando finaliza el proceso de listado de archivos.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell y todo lo que necesitas saber sobre esta utilidad
Figura 4: Muestra los datos de salida del script actualizado.

DIR.PS1: Pie de página

Lo único que queda por hacer es escribir en la pantalla el número total de archivos, carpetas, tamaño total de todos los archivos y espacio libre en esta partición del disco. Para hacer esto, necesitará utilizar las variables de contador ($totalFiles, $totalDirs, $totalSize) creadas en la sección anterior. Puedes averiguar cuánto espacio libre hay desde la variable $volInfo creada al comienzo del script.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell y todo lo que necesitas saber sobre esta utilidad
Figura 5: Muestra los datos de salida completos del script.

Se pueden realizar previsiones y mejoras

Aunque el script que usted crea produce un resultado casi idéntico al comando CMD.EXE DIR, hay algunas advertencias que debe tener en cuenta y algunas mejoras que se pueden realizar.

  • Este script no realiza ninguna comprobación de errores.
  • Si no se pasa una ruta válida al script, el script fallará y mostrará un mensaje de error de PowerShell.
  • El número total de directorios dado en el script es 2 menos que el resultado del comando CMD.EXE DIR porque el comando Get-ChildItem no cuenta los dos "." y “..” como en CMD.EXE.
  • Su script solo ordena por nombre de archivo, nombre de carpeta y no proporciona ninguna otra ordenación por atributos.
  • Su script no puede mostrar el contenido de la carpeta y todas las subcarpetas.

Cómo PowerShell le ayuda a automatizar cualquier cosa en su PC

Escriba scripts simples de PowerShell

Puede usar PowerShell para automatizar casi cualquier cosa, como cambiar el nombre de archivos por lotes para mantener la coherencia o iniciar aplicaciones automáticamente. Escribamos algunos scripts simples de Windows PowerShell para ver cómo funciona.

Nota : Si encuentra un error al ejecutar el script con respecto a la política de ejecución, es posible que deba permitir temporalmente la ejecución del script ejecutando "Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass".

Cambiar el nombre de los archivos de una carpeta por lotes

Puede utilizar PowerShell para copiar, mover y eliminar archivos en su PC. También puede cambiar el nombre de archivos por lotes de un tipo de archivo específico. Por ejemplo, aquí se explica cómo cambiar el nombre de varios archivos de texto reemplazando el prefijo "oldco" por "newco" en sus nombres de archivo:

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

En el script anterior, ".txt" es el filtro de extensión de archivo. Puede modificarlo y configurarlo en .jpg, .docx, etc. para buscar diferentes tipos de archivos.

Aplicación de inicio automático

Si abre el mismo conjunto de aplicaciones todos los días, puede escribir un script de PowerShell para iniciarlas con un solo clic:

#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"

Pegue el script en un archivo del Bloc de notas y guárdelo como LaunchFavoriteApps.ps1. Luego, simplemente haga doble clic en el archivo para iniciar todas las aplicaciones enumeradas en el script.

Copiar archivos importantes a una ubicación de respaldo

Puede realizar copias de seguridad periódicas de archivos importantes en una ubicación de respaldo utilizando el siguiente script. Asegúrese de cambiar las rutas de origen y destino según sea necesario:

#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse

Escriba un script de PowerShell para organizar automáticamente los archivos diariamente

Debido a los muchos tipos de archivos que se descargan todos los días, la carpeta Descargas puede saturarse rápidamente con todo tipo de archivos dispersos por todas partes. Para solucionar esto, podemos escribir un script de PowerShell que ordene los archivos descargados en carpetas por tipo de archivo al final de cada día.

Abra un nuevo archivo de Bloc de notas y pegue el siguiente script. Asegúrese de cambiar la ruta de la carpeta de origen en el script para que coincida con la ruta de la carpeta Descargas:

# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"

Para guardar el archivo, haga clic en Archivo > Guardar como e ingrese OrganizeDownloadsFolder.ps1 como nombre de archivo. Luego haga clic en Guardar como tipo y seleccione Todos los archivos . Haga doble clic en el archivo OrganizeDownloadsFolder.ps1 para ejecutar el script.

Programar y ejecutar tareas

Por supuesto, la creación de scripts es parte del proceso de automatización. La segunda parte es asegurarse de que el script pueda ejecutarse automáticamente para realizar la tarea. Para ello, podemos crear tareas programadas para ejecutar el script diariamente o según sea necesario.

Abra PowerShell, luego copie y pegue el siguiente script y presione Enter . Asegúrese de reemplazar 'J:\OrganizeDownloadsFolder.ps1' con la ruta completa del archivo a su script OrganizeDownloadsFolder.ps1 .

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

Una vez hecho esto, presione Enter . El script creará una tarea programada en el Programador de tareas para ejecutar el script de organización de archivos todos los días a las 5:00 p. m. Si prefieres un horario diferente puedes modificarlo en el script de arriba.

Además, puedes usar PowerShell para automatizar otras tareas cotidianas, como un script de monitoreo de espacio que te alerta cuando te quedas sin espacio libre en tu disco principal, proteger con contraseña lotes de documentos PDF e incluso aplicar fondos de pantalla en vivo desde tu carpeta de imágenes.

Si bien PowerShell es un lenguaje de scripting y una utilidad potente, no lleva mucho tiempo comprenderlo y utilizarlo, especialmente si no se está familiarizado con el entorno .NET Framework. Espero que este artículo junto con el script de ejemplo sean útiles para cualquiera que quiera comprender PowerShell. Pero el script creado en el ejemplo es bastante simple. Creemos que se puede construir y desarrollar de forma más completa para servir mejor a aplicaciones más complejas.

Sign up and earn $1000 a day ⋙

Leave a Comment

Cómo ver la información de la CPU de Chromebook

Cómo ver la información de la CPU de Chromebook

Este artículo le guiará sobre cómo ver la información de la CPU y verificar la velocidad de la CPU directamente en su Chromebook.

8 cosas geniales que puedes hacer con una vieja tableta Android

8 cosas geniales que puedes hacer con una vieja tableta Android

Si no quieres vender ni regalar tu vieja tableta, puedes usarla de 5 maneras: como marco de fotos de alta calidad, reproductor de música, lector de libros electrónicos y revistas, asistente de tareas domésticas y como pantalla secundaria.

Cómo conseguir unas uñas bonitas rápidamente

Cómo conseguir unas uñas bonitas rápidamente

Quieres tener unas uñas bonitas, brillantes y sanas rápidamente. Estos sencillos consejos para unas uñas bonitas que te presentamos a continuación te serán de utilidad.

Secretos de inspiración de color que sólo los diseñadores conocen

Secretos de inspiración de color que sólo los diseñadores conocen

Este artículo enumerará consejos inspirados en el color, compartidos por los mejores diseñadores de la comunidad de Creative Market, para que pueda obtener la combinación de colores perfecta en todo momento.

Todo lo que necesitas para sustituir tu portátil por un teléfono

Todo lo que necesitas para sustituir tu portátil por un teléfono

¿Realmente puedes reemplazar tu computadora portátil con tu teléfono? Sí, pero necesitarás los accesorios adecuados para convertir tu teléfono en una computadora portátil.

ChatGPT pronto podrá ver todo lo que sucede en tu pantalla

ChatGPT pronto podrá ver todo lo que sucede en tu pantalla

Una cosa importante en el video completo del evento es que se demostró la próxima función de la aplicación ChatGPT, pero no se compartieron detalles reales. Es la capacidad de ChatGPT de ver todo lo que sucede en la pantalla del dispositivo del usuario.

La IA está aprendiendo a engañar a los humanos a pesar de haber sido entrenada para ser honesta.

La IA está aprendiendo a engañar a los humanos a pesar de haber sido entrenada para ser honesta.

Muchas IA de alto nivel, a pesar de estar entrenadas para ser honestas, aprenden a engañar a través del entrenamiento e inducen sistemáticamente a los usuarios a creer falsas creencias, según descubre un nuevo estudio.

Cómo cambiar las preguntas en ChatGPT

Cómo cambiar las preguntas en ChatGPT

ChatGPT ahora tiene una opción de cambio de preguntas para que los usuarios puedan editar la pregunta o el contenido que están intercambiando con ChatGPT.

Cómo detectar códigos QR falsos y mantener tus datos seguros

Cómo detectar códigos QR falsos y mantener tus datos seguros

Los códigos QR parecen bastante inofensivos hasta que escaneas un código QR incorrecto y recibes algo desagradable en tu sistema. Si desea mantener su teléfono y sus datos seguros, existen algunas formas de identificar códigos QR falsos.

Qualcomm lanza el módem X85 5G con una serie de mejoras notables

Qualcomm lanza el módem X85 5G con una serie de mejoras notables

En el escenario del MWC 2025, Qualcomm causó sensación cuando presentó su octava generación de módem 5G llamado X85, que se espera que se use en los teléfonos inteligentes insignia que se lancen a finales de este año.

La nueva tecnología permite que los teléfonos cambien de color de forma flexible

La nueva tecnología permite que los teléfonos cambien de color de forma flexible

Tienes un iPhone 16 en color “Ultramar”, pero un buen día de repente te aburre ese color; ¿Qué vas a hacer?

Microsoft integra DeepSeek en la plataforma PC Copilot+

Microsoft integra DeepSeek en la plataforma PC Copilot+

En enero, Microsoft anunció planes para llevar versiones optimizadas para NPU del modelo DeepSeek-R1 directamente a las computadoras Copilot+ que funcionan con procesadores Qualcomm Snapdragon X.

Diferencia entre las funciones SI y Cambiar en Excel

Diferencia entre las funciones SI y Cambiar en Excel

La declaración SI es una función lógica común en Excel. La declaración SWITCH es menos conocida, pero puedes usarla en lugar de la declaración IF en algunos casos.

Cómo agregar un efecto de foco detrás del sujeto usando Adobe Camera Raw

Cómo agregar un efecto de foco detrás del sujeto usando Adobe Camera Raw

Agregar un efecto de foco detrás del sujeto en una fotografía es una excelente forma de separar el sujeto del fondo. El efecto de foco puede agregar profundidad a las fotografías de retrato.

Cómo aumentar el límite de tamaño de los archivos adjuntos de Outlook

Cómo aumentar el límite de tamaño de los archivos adjuntos de Outlook

Outlook y otros servicios de correo electrónico tienen límites en el tamaño de los archivos adjuntos en los correos electrónicos. Aquí encontrará instrucciones para aumentar el límite de tamaño de los archivos adjuntos de Outlook.