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.

Leave a Comment

Solución de problemas de actualizaciones de error H en Microsoft Teams

Solución de problemas de actualizaciones de error H en Microsoft Teams

¿Tiene problemas con el Error H de Microsoft Teams durante las actualizaciones? Descubra cómo solucionar el Error H de Microsoft Teams, sus causas comunes y soluciones rápidas para restablecer una colaboración fluida. Actualizado con las últimas soluciones.

Solución de problemas de errores de llavero en Microsoft Teams para Mac

Solución de problemas de errores de llavero en Microsoft Teams para Mac

¿Tienes problemas con el llavero de errores de Microsoft Teams para Mac? Descubre soluciones paso a paso y probadas para macOS y recupera una colaboración fluida. ¡Soluciones rápidas en el interior!

Cómo solucionar el error 1200 de Microsoft Teams en tu teléfono (iOS/Android)

Cómo solucionar el error 1200 de Microsoft Teams en tu teléfono (iOS/Android)

¿Cansado de que el error 1200 de Microsoft Teams bloquee tus llamadas? Descubre soluciones rápidas y paso a paso para iOS y Android y vuelve a trabajar en equipo sin problemas rápidamente, ¡sin necesidad de conocimientos técnicos!

¿Por qué falló mi grabación en Microsoft Teams? Razones comunes

¿Por qué falló mi grabación en Microsoft Teams? Razones comunes

¿Frustrado porque tu grabación de Microsoft Teams falló? Descubre las razones más comunes, como problemas de permisos, límites de almacenamiento y fallos de red, además de soluciones paso a paso para evitar futuros fallos y grabar siempre de forma impecable.

¿Por qué no puedo ver las salas de grupos pequeños en mi reunión de Teams?

¿Por qué no puedo ver las salas de grupos pequeños en mi reunión de Teams?

¿Frustrado porque las salas de reuniones no aparecen en tu reunión de Teams? Descubre las principales razones por las que no puedes verlas en Teams y sigue nuestras soluciones paso a paso para que funcionen correctamente en minutos. ¡Ideal tanto para organizadores como para participantes!

Solución de errores de red de Microsoft Teams en redes Wi-Fi públicas

Solución de errores de red de Microsoft Teams en redes Wi-Fi públicas

¿Tienes problemas con un error de red de Microsoft Teams en una red Wi-Fi pública? Obtén soluciones instantáneas como ajustes de VPN, comprobaciones de puertos y borrado de caché para restaurar llamadas y reuniones sin problemas. Guía paso a paso para una solución rápida.

¿Dónde está la papelera de reciclaje de Microsoft Teams? Cómo recuperar archivos borrados

¿Dónde está la papelera de reciclaje de Microsoft Teams? Cómo recuperar archivos borrados

¿Perdiste archivos importantes en Microsoft Teams? Descubre la ubicación exacta de la Papelera de reciclaje de Microsoft Teams y sigue nuestros pasos comprobados para recuperar archivos eliminados de forma rápida y sencilla, ¡sin necesidad de conocimientos técnicos!

Cómo configurar el estado Fuera de oficina en Microsoft Teams

Cómo configurar el estado Fuera de oficina en Microsoft Teams

Descubre cómo configurar el estado "Fuera de oficina" en Microsoft Teams con sencillos pasos para escritorio, móvil y sincronización con Outlook. Mantén la profesionalidad mientras estás fuera: ¡configuración rápida en minutos!

Dónde encontrar el código QR de Microsoft Teams para iniciar sesión rápidamente en dispositivos móviles

Dónde encontrar el código QR de Microsoft Teams para iniciar sesión rápidamente en dispositivos móviles

Descubre exactamente dónde encontrar el código QR de Microsoft Teams para iniciar sesión móvil ultrarrápido. Guía paso a paso con imágenes para conectarte en segundos, ¡sin necesidad de contraseñas!

Solución del error al unirse a una reunión en Microsoft Teams mediante un enlace directo

Solución del error al unirse a una reunión en Microsoft Teams mediante un enlace directo

¿Tienes problemas con el error al unirte a una reunión de Microsoft Teams? Descubre pasos comprobados para solucionarlo mediante enlaces directos. Soluciones rápidas para unirte sin problemas, ¡sin necesidad de conocimientos técnicos!

Cómo instalar el complemento de Microsoft Teams para Outlook 2026

Cómo instalar el complemento de Microsoft Teams para Outlook 2026

Domine la instalación del complemento de Microsoft Teams para Outlook 2026 sin esfuerzo. Aumente su productividad con una programación y reuniones fluidas. ¡Siga nuestros pasos probados y actualizados para un éxito inmediato!

¿Dónde está mi calendario de Teams? Solución de problemas de sincronización

¿Dónde está mi calendario de Teams? Solución de problemas de sincronización

¿Frustrado por "¿Dónde está mi calendario de Teams?"? Soluciona los problemas de sincronización en Microsoft Teams paso a paso. Restaura la vista de tu calendario y sincroniza sin esfuerzo: ¡consejos de expertos incluidos!

Cómo solucionar el error de inicio de sesión de Microsoft Teams en Chromebooks

Cómo solucionar el error de inicio de sesión de Microsoft Teams en Chromebooks

¿Tienes problemas con el inicio de sesión de Microsoft Teams en Chromebooks? Descubre soluciones paso a paso para resolver problemas de inicio de sesión rápidamente. Borra la caché, actualiza apps y mucho más para trabajar en equipo sin problemas. ¡Funciona con la última versión de Chrome OS!

Cómo cambiar tu foto de perfil de Microsoft Teams en iPhone y Android

Cómo cambiar tu foto de perfil de Microsoft Teams en iPhone y Android

Descubre la forma más sencilla de cambiar tu foto de perfil de Microsoft Teams en iPhone y Android. Guía paso a paso con capturas de pantalla para actualizaciones fluidas en la última versión de la app. ¡Mejora tu imagen profesional hoy mismo!

Solución de problemas de Microsoft Teams hoy: Qué comprobar primero

Solución de problemas de Microsoft Teams hoy: Qué comprobar primero

¿Te encuentras con un error en Microsoft Teams hoy? Esta guía paso a paso para la solución de problemas de Microsoft Teams te muestra las primeras comprobaciones para resolverlo rápidamente. Soluciones rápidas para la conectividad, la caché y las actualizaciones para que puedas volver a chatear sin problemas.