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
- Introducción/instalación
- Instalar PowerShell
- Instalar la biblioteca de Extensiones de la Comunidad
- Deshágase del mensaje «la ejecución de scripts está deshabilitada»
- Configure sus «scripts:» Ubicación de la unidad de PowerShell
- Configure su símbolo del sistema
- Tareas varias
- Escribir en la pantalla
- Pide al usuario que introduzca datos
- Manipular fechas
- Enviar correo electrónico
- Sleep
- Lista un directorio (recursivamente)
- Prueba si existe un archivo
- Leer las líneas del archivo en una matriz
- Escribir en un archivo
- Renombrar un archivo
- Eliminar un archivo
- Trabajar con expresiones regulares
- Dividir y unir cadenas
- Leer y escribir en el registro
- Entender las comillas
- Tiempo de un comando
- Texto a voz
- Acceder al portapapeles de Windows
- Cargar un ensamblaje .NET
- Ejecutar código creado en tiempo de ejecución
- Ejecuta un programa con un espacio en su ruta
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-Host
para 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