PowerShell Cookbook

Esta es una lista de elementos que mis colegas y yo hemos encontrado útiles en nuestro trabajo. No pretende ser enciclopédica, sino más bien un lugar para registrar cosas que un principiante encontraría útiles, especialmente cosas que podrían tomar mucho tiempo para averiguar.

Esta página se inició antes de que O’Reilly publicara Windows PowerShell Cookbook por Lee Holmes. Recomiendo el libro de O’Reilly, pero esta página no está relacionada con él.

Vea también PowerShell gotchas.

Esquema

  • Inicio/instalación
    • Instalar PowerShell
    • Instalar la librería Community Extensions
    • Deshacerse del mensaje «la ejecución de scripts está deshabilitada»
    • Configurar su «scripts:» Ubicación de la unidad de PowerShell
    • Configurar su símbolo del sistema
  • Tareas varias
    • Escribir en la pantalla
    • Pedir la entrada del usuario
    • Manipular fechas
    • Enviar correo electrónico
    • Dormir
    • Listar un directorio (recursivamente)
    • Probar si un archivo existe
    • Leer líneas de archivo en un array
    • Escribir en un archivo
    • Renombrar un archivo
    • Borrar un archivo
    • Trabajar con expresiones regulares
    • Dividir y unir cadenas
    • Tomar una página web
    • Leer y escribir en el registro
    • Comprender las comillas
    • Calcular un comando
    • Texto a voz
    • Acceder al portapapeles de Windows
    • Cargar un .NET
    • Ejecutar código creado en tiempo de ejecución
    • Ejecutar un programa con un espacio en su ruta

Introducción/instalación

Instalar PowerShell

Puede obtener PowerShell desde:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Instalar la biblioteca de Extensiones de la Comunidad

La biblioteca de Extensiones de la Comunidad de PowerShell (PSCX) está disponible aquí:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX

Es una útil colección de cmdlets y funciones. Instala un menú contextual «PowerShell Here» en WindowsExplorer que abre una ventana de comandos PowerShell en la carpeta sobre la que se hace clic con el botón derecho. Además, PSCX proporciona un archivo de ejemplo Profile.ps1.

Una vez instalado PSCX, escriba man about_pscx para ver un resumen de los cmdlets, proveedores, etc. que vienen con PSCX.

top

Deshágase del mensaje «la ejecución de scripts está deshabilitada»

El primer problema que probablemente encontrará al ejecutar scripts de PowerShell es algo así:

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Esto se debe a la configuración de seguridad por defecto de PowerShell que prohíbe la ejecución de scripts maliciosos.

Puede alterar este comportamiento haciendo lo siguiente:

PSH> set-executionPolicy RemoteSigned

Ahora sólo los scripts que provengan de fuentes remotas requerirán la firma digital.

top

Configure sus «scripts:» Ubicación de la unidad de PowerShell

Una vez que haya escrito una serie de scripts de PowerShell, podría resultar útil recopilarlos en un lugar y crear un PSDrive llamado scripts: para encontrarlos rápidamente. Usted podría añadir lo siguiente a su perfil PSCX para crear tal PSDrive.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Configure su símbolo del sistema

Para configurar su símbolo del sistema, simplemente cree una función llamada prompt y póngala en su perfil. Por ejemplo, lo siguiente hará que se muestre el directorio de trabajo.

function prompt { "$pwd> " }

Nota que puedes poner cualquier código que quieras dentro de la función prompt y ese código se ejecutará cada vez que pulses return.

top

Tareas varias

Escribir en la pantalla

Usa Write-Hostpara escribir la salida. Puede especificar opcionalmente -foregroundcolor para colorear la salida. Por ejemplo, los errores y las advertencias pueden resaltarse en rojo.

Ejemplo:

Write-Host "Hello world" -foregroundcolor red

top

Pide al usuario que introduzca datos

Use Read-Host.

Ejemplo:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipular fechas

El cmdlet get-date devuelve un objeto DateTime. Sin argumento, devuelve la hora y la fecha actuales. Con un argumento de cadena, sin necesidad de comillas, analiza la cadena en una fecha.

Ejemplo: Encuentre el número de días y horas desde el bicentenario de los Estados Unidos.

(get-date) - (get-date 7/4/1976)

También puede lanzar cadenas al objeto DateTime utilizando el cast .

top

Enviar correo electrónico

Utiliza el cmdlet Send-SmtpMail de PowerShell Community Extensions.

Ejemplo:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"

top

Sleep

Utiliza el cmdlet Start-Sleep. Tarda segundos por defecto, pero tiene una opción -milliseconds.

Ejemplo:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Lista un directorio (recursivamente)

Puede utilizar el comando dir, que es realmente un alias de Get-ChildItem. Para listar un directorio de forma recursiva, basta con añadir la opción -recurse.

Ejemplo:

dir f:\bin -recurse

top

Prueba si existe un archivo

Usa test-path.

top

Leer las líneas del archivo en una matriz

Utilizar get-content.

Ejemplo:

$a = (get-content foo.txt)

top

Escribir en un archivo

Utilizar Out-File. A menos que desee una salida Unicode, especifique -encoding ASCII

Ejemplo:

$foo | out-file -encoding ASCII foo.txt

top

Renombrar un archivo

Utilizar Rename-Item o su alias ren.

top

Eliminar un archivo

Utilizar Delete-Item o su alias del.

top

Trabajar con expresiones regulares

Ver Expresiones regulares en PowerShell y Perl.

top

Dividir y unir cadenas

Las cadenas tienen un método split. El argumento de split() es una cadena que contiene caracteres para dividir. La función ::split es más general. Su primer argumento es la cadena a dividir, y su segundo argumento es una expresión regular sobre la que dividir.

Ejemplo:

$a.split("`t ")

dividirá la cadena $a en una matriz de cadenas, dividiendo siempre que haya un tabulador o un espacio.

Ejemplo:

$a = "123,456,apple"; ::split($a, ",(?!\d)")

dividirá $a sobre comas no seguidas de dígitos. Así que la división devolvería «123,456» y «apple».

Si la cadena que está dividiendo es una ruta de Windows, es posible que desee utilizar el comando especializado Split-Path.

Para unir una matriz en una sola cadena, utilice el método ::join. El primer argumento es el carácter de separación y el segundo es el array.

Ejemplo:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Ahora $b contiene «1*2*3».

Toma una página web

Utiliza el Get-Url de PSCX o el objeto net.webclient de .NET. El primero es más sucinto pero el segundo permite más opciones.

Ejemplo:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

El código (new-object net.webclient) crea un objeto WebClient de .NET con muchos métodos útiles. Por ejemplo, podría llamar a DownladFile para guardar directamente en el disco en lugar de en una cadena. También hay métodos UploadData y UploadFile.

top

Leer y escribir en el registro

Puedes navegar por el registro como lo harías con el sistema de archivos, aunque hay que conocer algunos detalles.

Cada colmena del registro es como una unidad. Así, por ejemplo, para explorar HKEY_CURRENT_USER, puede cd HKCU: y luego utilizar cd para trabajar su camino hacia abajo el árbol. Utilice Get-ItemProperty para leer y Set-ItemProperty para escribir. También puede utilizar Remove-ItemProperty para borrar.

Ejemplo:

Los comandos siguientes listarán el contenido del nodo del registro que configura el cmd.exe shell. Al poner CompletionChar en 9, activamos la finalización de tabulación.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Este artículo de TechNet entra en más detalles.

top

Entender las comillas

PowerShell tiene cuatro tipos de comillas: simples y dobles ordinarias, y simples y dobles aquí-cadenas. Dentro de las comillas dobles y las cadenas here dobles, los nombres de las variables se sustituyen por sus valores y se interpretan las secuencias de escape de PowerShell. En las comillas simples y en las cadenas here simples, los nombres de las variables no se expanden y las secuencias de escape no se interpretan. Por ejemplo, el fragmento de código

 $a = "bar" 'foo`t$a', "foo`t$a"

producirá la salida

 foo`t$a foo bar

porque dentro de las comillas dobles, `t se expande a un tabulador y $a se expande a «bar».

Las cadenas here de PowerShell son como los documentos here de Perl. Dentro de una cadena here, las comillas dobles y simples no son especiales sino que se citan literalmente. Además, se conservan los saltos de línea.

Una cadena here comienza con @" o @' y termina con los mismos símbolos en el orden inverso. Debe haber una nueva línea después del marcador de apertura y antes del marcador de cierre.

Ejemplo

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

produce

 foo "baz" 'qux' bar

y

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

produce

 foo "baz" 'qux' $a

Nótese que no debe haber ningún espacio en blanco después de la comilla que abre una cadena here. De lo contrario, obtendrá el mensaje «Unrecognized token in source text.»

Aunque parecen similares, las cadenas here de PowerShell y las cadenas verbales de C# son bastante diferentes. La siguiente tabla resume las diferencias.

Cadenas literales de C# PowerShell here-strings
Puede contener saltos de línea Debe contener saltos de línea
Sólo variedad de comillas dobles Variedades de comillas simples y dobles
Comienza con @» Comienza con @» (o @’) más un salto de línea
Termina con « Termina con un salto de línea seguido de «@ (o ‘@)
No puede contener comillas dobles sincomillas dobles sin escapar Puede contener comillas
Desactiva las secuencias de escape de C# ‘@ desactiva las secuencias de escape de PowerShell pero «@ no

top

Tiempo de un comando

Utiliza Measure-Command para cronometrar el tiempo que tarda en completarse una tarea.

top

Texto a voz

Utilizar Out-Speech de PSCX.

top

Acceder al portapapeles de Windows

Utilizar los cmdlets de PSCX Get-Clipboard y Out-Clipboard para leer y escribir en el portapapeles.

Superior

Cargar un ensamblaje .NET

Puede llamar a LoadWithPartialName. Por ejemplo, para cargar el ensamblaje de la API de Team Foundation Server, se ejecutaría

::LoadWithPartialName("Microsoft.TeamFoundation.Client")

Véase también Resolve-Assembly de PSCX.

top

Ejecutar código creado en tiempo de ejecución

El comando Invoke-Expression es análogo a eval en Perl o JavaScript. Invoke-Expression $str Ejecuta el código contenido en la cadena $str.

Superior

Ejecuta un programa con un espacio en su ruta

Coloca comillas alrededor de la ruta y coloca un ampersand delante. Por ejemplo,

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

ejecutará el ejecutable WinEdt.exe que tiene dos espacios en su ruta completa.

Note que no puede omitir el ampersand. A diferencia de cmd.exe, PowerShell no asume que todas las cadenas son comandos. Sin el ampersand, una ruta citada es sólo una cadena.

top

Deja una respuesta

Tu dirección de correo electrónico no será publicada.