PowerShell y todo lo que necesitas saber sobre esta utilidad

¿Y si tu PC pudiera encargarse de las tareas rutinarias por ti? Con Windows PowerShell, puede. Aquí te explicamos cómo usar PowerShell para automatizar las tareas repetitivas del día a día que nadie quiere repetir 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 potente herramienta para que los administradores automaticen una amplia gama de tareas en equipos y redes. PowerShell contiene componentes del Símbolo del sistema y está basado en .NET Framework. Si está leyendo sobre WebTech360, debería saber que PowerShell es la herramienta predilecta de los administradores de TI para gestionar grandes redes.

Aprender a usar PowerShell simplificará muchas tareas cotidianas tediosas. Además, podrá realizar cambios en todo el sistema a través de la red sin tener que configurar cada servidor individualmente. PowerShell se está convirtiendo en un componente esencial para la gestión de entornos de nube híbrida .

PowerShell tiene muchos usos diferentes para ayudarle a trabajar de forma más eficiente y mantener su red funcionando eficientemente. Los usos más básicos incluyen: programar actualizaciones diarias de los sistemas, generar informes sobre los procesos actuales, servicios periódicos y más. Si bien muchas de estas tareas se pueden realizar a través de la interfaz gráfica de usuario, el objetivo de PowerShell es agilizarlas.

Si tiene una tarea de mantenimiento rutinaria que tarda unos minutos en configurarse, puede crear un script con la misma funcionalidad en un solo comando llamado PowerShell. Así, la próxima vez que abra ese script, se ejecutará en segundo plano. Dominar la lógica de scripting de PowerShell, comprender el funcionamiento de los objetos y las variables, e implementarlo de forma inteligente en su red le hará preguntarse por qué no usó PowerShell antes.

Este tutorial cubrirá los conceptos básicos de PowerShell, lo cual será útil para quienes se inician en TI, especialmente si están familiarizados con el Símbolo del sistema de Windows. Explicará cómo usar herramientas y comandos básicos, cómo trabajar con archivos y carpetas, comprender objetos, usar variables y administrar servidores remotos.

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

Tras el lanzamiento de Windows NT, CMD.EXE se convirtió en la utilidad de línea de comandos de Windows. Aunque CMD.EXE heredó algunos elementos de su predecesor en DOS (COMMAN.COM), seguía basándose en un lenguaje de scripting bastante primitivo: utilizaba archivos de comandos de Windows (.CMD y .BAT). La incorporación de Windows Scripting Host y los lenguajes VBScript y JScript mejoró considerablemente las capacidades de scripting de la utilidad.

Estas tecnologías son una combinación bastante equilibrada de utilidades avanzadas de línea de comandos y entornos de scripting. La verdadera preocupación no es cuántos archivos CMD.EXE, .CMD y Windows Scripting Host se pueden manipular con ellas. La principal queja y preocupación es la realización de tareas aparentemente sencillas.

Mediante un marco de herramientas de línea de comandos y scripts, cualquier script medianamente completo requiere una combinación de comandos por lotes, un host de scripts de Windows y ejecutables independientes. Cada script utiliza diferentes convenciones para la ejecución, las solicitudes, el análisis y la devolución de datos.

El escaso soporte de variables en CMD.EXE, las interfaces inconsistentes y el acceso limitado a la configuración de Windows, junto con otra debilidad, dificultan la implementación y el uso de scripts de línea de comandos. ¿Cuál es esta "otra debilidad", se preguntarán? Es texto. En estas tecnologías, todo es texto. La salida de un comando o script es texto y debe analizarse y formatearse para que sirva de 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 fundamentos para comprender los conceptos clave que forman la base de PowerShell. Deberá dedicar más tiempo a aprender y dominar los conceptos más avanzados a medida que se familiarice con los comandos de PowerShell.

Herramientas de PowerShell

PowerShell se instala de forma predeterminada en Windows 10, Windows 7, Windows Server 2008 R2 y versiones posteriores de Windows. Las versiones más recientes de PowerShell incorporan nuevas funciones y "cmdlets" (término de Microsoft para los comandos de PowerShell, que se pronuncia "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 funciones 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 . Sin embargo, este cmdlet no está disponible en Windows 7, ni siquiera con 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 se parece a una línea de comandos tradicional, pero con todas las funciones de PowerShell. Los nombres de variables, los bucles, el autocompletado de comandos y la canalización están disponibles desde la consola de PowerShell.

Para un uso más avanzado (como la creación de scripts), PowerShell ISE ofrece autocompletado de comandos, resaltado de código y la función de autocompletado de código Intellisense de Microsoft para ayudarle a crear y probar código de PowerShell. PowerShell ISE también le permite trabajar con varios scripts de PowerShell simultáneamente mediante la navegación por pestañas.

cmdlets en PowerShell

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

En primer lugar, está la capacidad de inferir fácilmente los nombres de los cmdlets, o al menos hacerlos más fáciles de encontrar. 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 línea de comandos.

Los cmdlets utilizan el formato verbo-sustantivo, como Get-Service, Stop-Service o Import-Csv. La parte verbal del nombre del cmdlet indica la acción realizada sobre el sustantivo. Normalmente, los cmdlets que se utilizan para recuperar información incluyen el verbo Get en su nombre, como Get-Process o Get-Content . Los comandos para modificar algo suelen empezar con el verbo Set , y los comandos para añadir una nueva entidad suelen empezar con Add o New .

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

Módulos en PowerShell

Puede usar alias tanto para cmdlets como para parámetros para ahorrar pulsaciones de teclas y acortar la longitud total del comando (útil al encadenar varios comandos). Aunque estos alias no siempre utilizan las convenciones de nomenclatura estándar, siguen reflejando las utilidades tradicionales de la línea de comandos.

En PowerShell, 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 usar un alias predefinido proporcionado por el cmdlet o pueden crearse introduciendo suficientes caracteres para crear una coincidencia única entre los parámetros admitidos por el cmdlet.

Gestión de archivos y carpetas

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

Para encontrar archivos y carpetas, una de las primeras herramientas de línea de comandos que un administrador aprendía en la era informática antigua era el comando dir. Este comando lista los archivos y carpetas contenidos en el directorio especificado.

PowerShell tiene un comando similar, el cmdlet Get-ChildItem . Este comando permite crear rápidamente una lista de archivos en un directorio, de modo que se puedan manipular mediante un comando de canalización o asignar la salida a una variable.

Get-ChildItem se puede usar simplemente proporcionando una ruta, ya sea mediante una canalización, con el parámetro -Path o directamente después del nombre del cmdlet. Para modificar la respuesta devuelta por Get-ChildItem, es necesario considerar algunos parámetros proporcionados por el cmdlet.

El parámetro -Filter permite buscar archivos. De forma predeterminada, Get-ChildItem solo devuelve elementos secundarios directos del directorio de destino. Esta funcionalidad se puede ampliar con el parámetro -Recurse , que busca recursivamente los directorios del directorio actual.

En PowerShell 4.0, Get-ChildItem añadió la capacidad de limitar los resultados a archivos o directorios mediante el modificador –File o –Directory . Las versiones anteriores de PowerShell debían pasar los resultados a Where-Object, filtrando por la propiedad PSIsContainer para determinarlo. A continuación se muestra un ejemplo de ambas técnicas utilizadas para devolver directorios contenidos 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 usar  -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 mediante -Hidden, -ReadOnly y –System , respectivamente. En versiones anteriores se podía lograr una funcionalidad similar filtrando la propiedad Mode con Where-Object:

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

Comprobar si el archivo existe

Normalmente, al trabajar con archivos, solo necesitamos saber si el archivo existe o si la ruta del directorio es válida. PowerShell proporciona un cmdlet para esto, llamado 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.

Al copiar o mover una estructura de directorio, se debe usar -Recurse para que el cmdlet realice la acción en el directorio y su contenido. En algunos casos, también se requiere -Force , como cuando se sobrescribe un archivo de solo lectura durante 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 una eliminación masiva, use "WhatIf" . "WhatIf" le permite ver qué sucedería si ejecutara un script o comando, y si esto podría tener algún impacto negativo al eliminar datos empresariales importantes. Cabe destacar que "WhatIf" no se limita a operaciones con archivos; se usa ampliamente en PowerShell.

Para los scripts que se ejecutan manualmente o, peor aún, que tienen comandos dependientes que se ejecutan manualmente, considere usar -Confirm . Esto le permite requerir la interacción del usuario antes de que la operación se ejecute.

Scripts de PowerShell = Archivos por lotes con esteroides

PowerShell está escrito en el lenguaje .NET y se basa en gran medida en .NET Framework. Por lo tanto, PowerShell está diseñado como un shell orientado a objetos y un lenguaje de scripting. Todo en PowerShell se trata como un objeto con todas las capacidades de .NET Framework. Un comando expone una colección de objetos que pueden usarse mediante las propiedades y métodos de ese tipo de objeto. Al canalizar la salida de un comando a otro, PowerShell pasa el objeto, no solo la salida de texto del primer comando. Esto 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 poder aceptar objetos entre comandos supone un gran cambio en la teoría de las utilidades de línea de comandos. Dicho esto, PowerShell sigue funcionando como un shell tradicional. Se pueden escribir y ejecutar comandos, scripts y ejecutables desde la línea de comandos, y los resultados se muestran como texto. Los archivos .CMD y .BAT de Windows, los VBScripts, los JScripts y los ejecutables que se ejecutan dentro de CMD.EXE siguen ejecutándose en PowerShell. Sin embargo, al no estar orientados a objetos, no tienen acceso completo a los objetos creados y utilizados en PowerShell. Estos scripts y ejecutables heredados seguirán tratándolo todo como texto, pero PowerShell se puede combinar con otras tecnologías. Esto es especialmente importante si se desea empezar 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 modificar su comportamiento. Al ejecutar un cmdlet o una función, puede proporcionar valores de parámetro 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.

¿Y si solo quieres obtener un proceso específico? Puedes hacerlo usando parámetros. Por ejemplo, para obtener todos los procesos de Slack, puedes 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 acepta 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., NombreDeEquipo, Módulo, InformaciónDeVersiónDeArchivo y otros parámetros comunes. Los símbolos aquí significan:

Símbolo

Nombre

Significado

 

Tambor

El parámetro no acepta entrada

-

Guión

Especifique 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 indican el tipo de datos requeridos, como cadena, entero, booleano o fecha y hora. 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 anterior de Get-Process usó el parámetro Name para restringir los resultados. Sin embargo, si desea restringirlo a un proceso más específico, puede usar el parámetro ID , que requiere un 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 procesa todos los datos como objetos. Para crear un script, estos objetos se ejecutan mediante una serie de cmdlets o funciones conectados mediante el símbolo de canalización (|). Elegir los cmdlets adecuados y conectarlos en una secuencia lógica mediante una canalización es fundamental para un script eficiente.

Supongamos que está creando un script para ordenar y mostrar los 5 archivos que ocupan más espacio en un directorio. Hay maneras más eficaces de escribir un script de ordenación de archivos, pero esta sencilla es 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.

¡Felicitaciones! Ya puedes crear scripts de PowerShell PS1.

Ejemplo de un script de PowerShell

Leer y comprender las maravillas de las nuevas tecnologías es una cosa, pero usarlas es otra muy distinta. En el resto de este artículo, desarrollaremos un script de PowerShell para demostrar sus capacidades y cómo usarlo.

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). Además del nombre de cada objeto, la información proporcionada 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 subdirectorios.

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

Ejecutar DIR en PowerShell también genera una lista de directorios como la de la Figura 2, pero de forma ligeramente diferente. PowerShell no tiene el comando DIR, sino Get-ChildItem, que realiza la misma función. En PowerShell, DIR es un alias de Get-ChildItem. No pretendo explicar los alias en este artículo. En PowerShell, DIR es la abreviatura de Get-ChildItem.

DIR en PowerShell proporciona prácticamente la misma información mencionada anteriormente: una lista de archivos y carpetas, la fecha y hora de su última modificación y el tamaño de cada archivo. Sin embargo, carece de la información resumida que proporciona DIR en CMD.EXE: el tamaño total de todos los archivos de la carpeta, el número total de archivos y el número total de subcarpetas.

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

Para el 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 script.

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, se usaría 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 obtener información sobre la partición de una unidad, deberá usar Instrumental de Administración de Windows (WMI). Los detalles de WMI quedan fuera del alcance de este artículo, por lo que no los analizaremos aquí. Sin embargo, el código de PowerShell a continuación es bastante fácil de entender sin usar WMI. Puede crear una variable "$filter" para usarla con el comando Get-WmiObject. Este filtro le indica al comando Get-WmiObject que solo desea información sobre una unidad específica. Los resultados del comando Get-WmiObject se almacenan en una variable llamada $volInfo. Recuerde que en PowerShell todo es un objeto; $volInfo ahora es un objeto devuelto por Get-WmiObject.

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

Ahora tiene acceso a todos los objetos y métodos asociados al objeto. El número de serie del volumen es accesible mediante la propiedad VolumeSerialNumber. El número devuelto es una cadena de 8 caracteres. Sin embargo, a menudo se desea formatearlo como cuatro números separados por un guion. Esto se puede hacer de forma similar a la siguiente línea. El guion al final de la primera línea es el carácter de continuación de línea en PowerShell. Básicamente, le indica a PowerShell que la línea no se divide y que incluye la siguiente. Los saltos de línea no son necesarios al escribir código, pero para reducir el ancho y hacerlo más legible, se recomienda hacerlo.

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

Ahora que tiene un objeto $volInfo, puede escribir la información del encabezado DIR en la pantalla. Si la unidad no tiene nombre, el texto que se muestra en la pantalla será ligeramente diferente. Se utiliza una simple instrucción If-Else para comprobar si la propiedad VolumeName es una cadena vacía. La instrucción Write-Host se utiliza para escribir cada línea de texto 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 usa para insertar una nueva línea antes y después del texto. El comando Write-Host añade una nueva línea al final de cada línea. Por lo tanto, el efecto de "`n" es crear una línea en blanco antes y después del texto.

¿Observó el "-eq" en el comando If? Es un operador de comparación de igualdad. La siguiente tabla muestra 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. Primero, ejecute el comando Get-ChildItem de PowerShell para obtener una colección de archivos y pasarla al script como parámetro. El comando Get-ChildItem obtendrá una colección de objetos de archivo y carpeta, no solo sus nombres, sino que también los canalizará directamente al comando Sort-Object para ordenarlos. De forma predeterminada, el comando Sort-Object ordena los objetos según la propiedad Name. Por lo tanto, no es necesario especificar ningún otro parámetro. La colección de objetos ordenada se almacenará en una variable llamada $items.

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

Una vez que tenga una colección de objetos de archivo y carpeta, debe recorrerlos y mostrar las propiedades correspondientes. El comando para esto es ForEach. Para cada archivo o carpeta, las propiedades mostradas serán la fecha y hora de la última modificación, el nombre, la longitud o el tamaño del archivo. Las cadenas de aspecto extraño entre paréntesis son códigos de formato de cadena .NET. Se utilizan para alinear campos a la izquierda/derecha y dar formato a 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.

La instrucción If 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 verificarlo, ya que el código para directorios suele ser diferente al de archivos.

Observe la línea $totalDirs++ dentro de la instrucción If. Este es un contador responsable de registrar el número de directorios. De igual forma, existe la variable $totalFiles que registra el tamaño total de todos los archivos. Estos valores siempre se calculan durante la ejecución, pero solo se muestran al finalizar 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

Solo queda escribir en pantalla el número total de archivos, directorios, el tamaño total de todos los archivos y el espacio libre en esta partición del disco. Para ello, necesitará usar las variables de contador ($totalFiles, $totalDirs, $totalSize) creadas en la sección anterior. Puede consultar la cantidad de espacio libre con la variable $volInfo creada al principio 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 directorios “.” 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

Puedes usar PowerShell para automatizar prácticamente cualquier cosa, como renombrar archivos por lotes para mantener la coherencia o iniciar aplicaciones automáticamente. Escribamos algunos scripts sencillos 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

Puedes usar PowerShell para copiar, mover y eliminar archivos en tu PC. También puedes renombrar archivos de un tipo específico en bloque. Por ejemplo, así puedes renombrar varios archivos de texto reemplazando el prefijo "oldco" por "newco" en sus nombres:

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 como .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, haga doble clic en el archivo para iniciar todas las aplicaciones que aparecen 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 usando 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

Dado que se descargan muchos tipos de archivos a diario, la carpeta Descargas puede saturarse rápidamente con todo tipo de archivos dispersos. Para solucionarlo, podemos escribir un script de PowerShell que ordene los archivos descargados en carpetas por tipo al final de cada día.

Abra un nuevo archivo del 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 de 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 introduzca "OrganizateDownloadsFolder.ps1" como nombre. A continuación, haga clic en " Guardar como tipo" y seleccione " Todos los archivos ". Haga doble clic en el archivo " OrganizateDownloadsFolder.ps1" para ejecutar el script.

Programar y ejecutar tareas

Por supuesto, escribir un script es una parte del proceso de automatización. La segunda parte consiste en garantizar que el script se ejecute automáticamente para realizar la tarea. Para ello, podemos crear tareas programadas que ejecuten el script a diario o según sea necesario.

Abra PowerShell, copie y pegue el siguiente script y presione Intro . Asegúrese de reemplazar "J:\OrganizeDownloadsFolder.ps1" con la ruta completa del archivo 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 17:00. Si prefiere una hora diferente, puede modificarla en el script anterior.

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.

Aunque PowerShell es una potente utilidad y lenguaje de scripting, dominarlo y usarlo requiere algo de tiempo, especialmente si no se está familiarizado con el entorno .NET Framework. Espero que este artículo y el script de ejemplo sean útiles para quienes deseen comprender PowerShell. Sin embargo, el script de ejemplo creado en el artículo es bastante simple. Creo que se puede crear y desarrollar de forma más completa para aplicaciones más complejas.

Tags: #System
Sign up and earn $1000 a day ⋙

Leave a Comment

Cómo solucionar el error de entrada de datos del kernel en Windows

Cómo solucionar el error de entrada de datos del kernel en Windows

El error de entrada de datos del kernel (código de detención 0x0000007a) es causado por sectores defectuosos, virus, discos duros o RAM defectuosa.

Cómo abrir la Seguridad de Windows en Windows 10

Cómo abrir la Seguridad de Windows en Windows 10

Seguridad de Windows está activada y protege de forma proactiva su dispositivo escaneando en busca de malware, virus y otras amenazas de seguridad.

Cómo ver la configuración del ordenador de forma fácil y rápida

Cómo ver la configuración del ordenador de forma fácil y rápida

Hay muchas formas de ver la configuración de su computadora, ver la configuración de su computadora portátil.

Reparar teclas de función que no funcionan en Windows 10

Reparar teclas de función que no funcionan en Windows 10

Las teclas de función Fn le brindan una forma más rápida y sencilla de controlar algunas funciones de hardware.

Cómo eliminar la advertencia del triángulo amarillo en la unidad C de Windows

Cómo eliminar la advertencia del triángulo amarillo en la unidad C de Windows

Este indicador fuera de lugar generalmente significa que se ha desactivado el cifrado de BitLocker, que hay una actualización que requiere reiniciar o que hay una actualización de firmware pendiente.

6 formas de abrir las Propiedades del equipo/sistema en Windows 10

6 formas de abrir las Propiedades del equipo/sistema en Windows 10

Puede utilizar uno de los siguientes 6 métodos para abrir Propiedades del equipo (o Propiedades del sistema) en Windows 10.

Cómo bloquear la red Wi-Fi de invitados para que nadie pueda espiar

Cómo bloquear la red Wi-Fi de invitados para que nadie pueda espiar

Si bloquea correctamente su red Wi-Fi para invitados, podrá compartir su conexión a Internet con cualquier visitante sin compartir ninguna otra información.

3 formas de desactivar el firewall de Windows 11

3 formas de desactivar el firewall de Windows 11

En este artículo, WebTech360 le guiará sobre cómo desactivar el firewall en Windows 11.

Pequeños cambios ayudan a que las computadoras con Windows se aceleren significativamente

Pequeños cambios ayudan a que las computadoras con Windows se aceleren significativamente

Cuando compraste tu computadora, arrancaba en segundos y funcionaba de maravilla. Pero las cosas han cambiado con el tiempo.

Cómo arreglar archivos temporales que ocupan mucho espacio en tu computadora

Cómo arreglar archivos temporales que ocupan mucho espacio en tu computadora

Este documento trata sobre cómo eliminar archivos .tmp, no sobre cómo borrar el historial de Internet o el caché del navegador.

Cómo desactivar aplicaciones en segundo plano en Windows 11, reducir el consumo de RAM en Win 11

Cómo desactivar aplicaciones en segundo plano en Windows 11, reducir el consumo de RAM en Win 11

Puede desactivar las aplicaciones en segundo plano de Windows 11 para optimizar el rendimiento, ahorrar batería y reducir el consumo de RAM.

Cómo instalar y usar una VPN en Windows 11

Cómo instalar y usar una VPN en Windows 11

Instalar una VPN ayudará a mantener su computadora con Windows 11 más segura.

8 atajos de accesibilidad de Windows que desbloquean nuevas opciones para todos

8 atajos de accesibilidad de Windows que desbloquean nuevas opciones para todos

Windows ofrece una serie de opciones de accesibilidad útiles, ideales para personalizar la interfaz de su PC, mejorar la comodidad e incluso operar cosas completamente con manos libres.

12 formas de acceder rápidamente a la Configuración en Windows 10

12 formas de acceder rápidamente a la Configuración en Windows 10

En Windows 10, Microsoft integró una nueva aplicación llamada Configuración. Esta aplicación es una aplicación Metro creada por Microsoft para reemplazar la clásica aplicación Panel de Control.

Usar CMD para eliminar carpetas grandes en Windows

Usar CMD para eliminar carpetas grandes en Windows

Las carpetas grandes del sistema ocupan mucho espacio. Muchas carpetas que creas, tras eliminarlas, vuelven a aparecer al cabo de un tiempo. Quizás sean carpetas basura que intentas eliminar.

Cómo solucionar el error de entrada de datos del kernel en Windows

Cómo solucionar el error de entrada de datos del kernel en Windows

El error de entrada de datos del kernel (código de detención 0x0000007a) es causado por sectores defectuosos, virus, discos duros o RAM defectuosa.

Cómo abrir la Seguridad de Windows en Windows 10

Cómo abrir la Seguridad de Windows en Windows 10

Seguridad de Windows está activada y protege de forma proactiva su dispositivo escaneando en busca de malware, virus y otras amenazas de seguridad.

Cómo ver la configuración del ordenador de forma fácil y rápida

Cómo ver la configuración del ordenador de forma fácil y rápida

Hay muchas formas de ver la configuración de su computadora, ver la configuración de su computadora portátil.

Reparar teclas de función que no funcionan en Windows 10

Reparar teclas de función que no funcionan en Windows 10

Las teclas de función Fn le brindan una forma más rápida y sencilla de controlar algunas funciones de hardware.

Cómo eliminar la advertencia del triángulo amarillo en la unidad C de Windows

Cómo eliminar la advertencia del triángulo amarillo en la unidad C de Windows

Este indicador fuera de lugar generalmente significa que se ha desactivado el cifrado de BitLocker, que hay una actualización que requiere reiniciar o que hay una actualización de firmware pendiente.

6 formas de abrir las Propiedades del equipo/sistema en Windows 10

6 formas de abrir las Propiedades del equipo/sistema en Windows 10

Puede utilizar uno de los siguientes 6 métodos para abrir Propiedades del equipo (o Propiedades del sistema) en Windows 10.

Cómo bloquear la red Wi-Fi de invitados para que nadie pueda espiar

Cómo bloquear la red Wi-Fi de invitados para que nadie pueda espiar

Si bloquea correctamente su red Wi-Fi para invitados, podrá compartir su conexión a Internet con cualquier visitante sin compartir ninguna otra información.

3 formas de desactivar el firewall de Windows 11

3 formas de desactivar el firewall de Windows 11

En este artículo, WebTech360 le guiará sobre cómo desactivar el firewall en Windows 11.

Pequeños cambios ayudan a que las computadoras con Windows se aceleren significativamente

Pequeños cambios ayudan a que las computadoras con Windows se aceleren significativamente

Cuando compraste tu computadora, arrancaba en segundos y funcionaba de maravilla. Pero las cosas han cambiado con el tiempo.

Cómo arreglar archivos temporales que ocupan mucho espacio en tu computadora

Cómo arreglar archivos temporales que ocupan mucho espacio en tu computadora

Este documento trata sobre cómo eliminar archivos .tmp, no sobre cómo borrar el historial de Internet o el caché del navegador.

Cómo desactivar aplicaciones en segundo plano en Windows 11, reducir el consumo de RAM en Win 11

Cómo desactivar aplicaciones en segundo plano en Windows 11, reducir el consumo de RAM en Win 11

Puede desactivar las aplicaciones en segundo plano de Windows 11 para optimizar el rendimiento, ahorrar batería y reducir el consumo de RAM.

Cómo instalar y usar una VPN en Windows 11

Cómo instalar y usar una VPN en Windows 11

Instalar una VPN ayudará a mantener su computadora con Windows 11 más segura.

8 atajos de accesibilidad de Windows que desbloquean nuevas opciones para todos

8 atajos de accesibilidad de Windows que desbloquean nuevas opciones para todos

Windows ofrece una serie de opciones de accesibilidad útiles, ideales para personalizar la interfaz de su PC, mejorar la comodidad e incluso operar cosas completamente con manos libres.

12 formas de acceder rápidamente a la Configuración en Windows 10

12 formas de acceder rápidamente a la Configuración en Windows 10

En Windows 10, Microsoft integró una nueva aplicación llamada Configuración. Esta aplicación es una aplicación Metro creada por Microsoft para reemplazar la clásica aplicación Panel de Control.

Usar CMD para eliminar carpetas grandes en Windows

Usar CMD para eliminar carpetas grandes en Windows

Las carpetas grandes del sistema ocupan mucho espacio. Muchas carpetas que creas, tras eliminarlas, vuelven a aparecer al cabo de un tiempo. Quizás sean carpetas basura que intentas eliminar.