Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Teoría PowerShell 1
Teoría PowerShell 1
Tutorial básico de
PowerShell
Contenido
1. Introducción a PowerShell.................................................................................................... 3
2. Uso de PowerShell ................................................................................................................ 4
3. Consola ................................................................................................................................. 5
3.1. Formato de cmdlet ...................................................................................................... 5
3.2. Cmdlets disponibles ..................................................................................................... 9
4. Canalización de objetos ...................................................................................................... 13
5. Windows PowerShell ISE .................................................................................................... 16
6. Sintaxis de scripts ............................................................................................................... 17
6.1. Preparación para ejecutar scripts de PowerShell ...................................................... 17
6.2. Variables y parámetros .............................................................................................. 18
6.3. Uso de comillas .......................................................................................................... 19
6.4. Comentarios............................................................................................................... 19
6.5. Operadores ................................................................................................................ 20
6.6. Condiciones y ciclos ................................................................................................... 20
7. Funciones............................................................................................................................ 21
7.1. Parámetros ................................................................................................................ 21
7.2. Opciones de parámetros ........................................................................................... 22
7.3. Estructura de las funciones........................................................................................ 23
8. Uso de la Ayuda .................................................................................................................. 24
8.1. Manejo de Errores ..................................................................................................... 25
9. Cmdlets más usados ........................................................................................................... 28
9.1. Ejemplos..................................................................................................................... 30
10. Explorar Windows PowerShell ISE ................................................................................. 32
11. Alias de compatibilidad .................................................................................................. 34
11.1. Usar nombres de comando conocidos ...................................................................... 34
11.2. Interpretar los alias estándar ..................................................................................... 35
11.3. Crear nuevos alias ...................................................................................................... 36
1. Introducción a PowerShell
2. Uso de PowerShell
3. Consola
Por ejemplo, el siguiente cmdlet muestra todos los servicios cuyos nombres comienzan
con "W":
Get-Service -Name W*
Si nos olvidamos los parámetros de un cmdlet, solo use un script como el siguiente, que
mostrará los parámetros para el cmdlet Get-Process:
Get-Process | Get-Member
Para pasar la salida de un cmdlet como entrada de otro se usa el símbolo “|”.
A continuación, se mencionan y explican algunos de los cmdlets más comunes.
• Get-Command: Muestra un listado de todos los cmdlets que se encuentran
disponibles para usar.
• Get-Help: Muestra la ayuda de un cmdlet. Ejemplo:
4. Canalización de objetos
Las canalizaciones actúan como una serie de segmentos de canalización conectados. Los
elementos que se mueven por la canalización pasan a través de cada segmento. Para
crear una canalización en Windows PowerShell, se conectan comandos con el operador
de canalización "|". La salida de cada comando se usa como entrada para el siguiente.
Las canalizaciones son sin duda el concepto más valioso usado en las interfaces de línea
de comandos. Si se usan correctamente, las canalizaciones no solo reducen el esfuerzo
que implica escribir comandos complejos, sino que también facilitan la visualización del
flujo de trabajo en los comandos. Una característica útil relacionada con las
canalizaciones es que, dado que operan en cada elemento por separado, no tienen que
modificarse según la ausencia de elementos o la presencia de uno o muchos elementos
en la canalización. Además, cada comando de una canalización (denominado un
elemento de canalización) suele pasar la salida al siguiente comando de la canalización
elemento por elemento. Normalmente, esto reduce la demanda de recursos de
comandos complejos y permite empezar a obtener la salida inmediatamente.
La notación usada para las canalizaciones es similar a la que se usa en otros shells, por
lo que, a primera vista, puede que no sea evidente que Windows PowerShell presenta
algo nuevo. Por ejemplo, si usa el cmdlet Out-Host para forzar una presentación página
por página de la salida de otro comando, la salida tiene el aspecto del texto normal que
se muestra en la pantalla:
consume una gran cantidad de CPU. Dado que el procesamiento se transfiere al cmdlet
Out-Host cuando tiene una página completa lista para mostrar, los cmdlets que lo
preceden en la canalización detienen la operación hasta que la siguiente página de salida
esté disponible. Puede verlo si usa el Administrador de tareas de Windows para
supervisar el uso de la CPU y la memoria de Windows PowerShell.
En lugar de utilizar texto para permitir que los comandos de una canalización se
comuniquen, Windows PowerShell usa objetos. Desde el punto de vista de un usuario,
los objetos empaquetan información relacionada en un formulario que facilita la
manipulación de la información como una unidad y la extracción de los elementos
específicos que necesita.
Windows PowerShell ISE (Integrated Scripting Engine), es el IDE que nos provee
Windows donde podemos ejecutar comandos o cmdlets , escribir, probar, crear, guardar
o depurar scripts en un entorno con interfaz gráfica, con edición multimedia,
autocompletado con el tabulador, sintaxis coloreada, ejecución selectiva, ayuda
contextual y compatibilidad con idiomas que se escriben de derecha a izquierda, con
ella podemos tener una experiencia de usuario más enriquecida a la hora de automatizar
nuestras tares de administración con la creación de scripts y la fácil incorporación
cmdlets, gracias al panel de módulos que nos provee ayuda en la utilización y búsqueda
de los mismos.
6. Sintaxis de scripts
6.1. Preparación para ejecutar scripts de PowerShell
Los scripts de PowerShell se almacenan en archivos .ps1. Por diseño, no se puede
ejecutar una secuencia de comandos simplemente haciendo doble clic en un archivo;
esto ayuda a evitar daños accidentales al sistema. En su lugar, para ejecutar un script,
hacemos clic derecho y hacemos clic en "Ejecutar con PowerShell":
Además, hay una política que restringe la ejecución de scripts. Se puede verificar esta
política ejecutando el comando Get-ExecutionPolicy en PowerShell:
Las variables pertenecen al ámbito en donde fueron declaradas. Esto quiere decir que,
si se declara una variable dentro de una función, sólo será́ accesible dentro de ella.
Las siguientes son variables propias de PowerShell:
Variable Contiene
$_ Objeto proveniente del pipeline
$Args Array que contiene cada uno de los parámetros
pasados
$? Estado del último comando ejecutado. True si fue
exitoso, False en caso de error
$False Constante False
$True Constante True
$Null Constante Null
$PSVersionTable Versión de PowerShell
$Pwd Path actual
$Errors Array con los últimos errores, siendo $Error[0] el más
reciente
Ejemplo:
Write-Output ('Primer parámetro: ' + $Args[0])
Write-Output ('Último parámetro: ' + $Args[-1])
Write-Output ('Cantidad de argumentos: ' + $Args.Count)
Salida:
Primer parámetro: param1
Último parámetro: param3
Cantidad de argumentos: 3
Utilización de comillas
6.4. Comentarios
Para la utilización de comentarios dentro del código tenemos 2 opciones, los comentarios de
línea o los de múltiples líneas:
Ejemplo:
# Comentario Simple
<# Comentario
Multi
Línea #>
6.5. Operadores
• Aritméticos: +, -, *, /, %
• De asignación; =, +=, -=, *=, /=, %=
• De comparación: -eq, -ne, -gt, -lt, -le, -ge
• También coincidencia (-match, -nomatch), sustitución (-replace) y de patrones (-like, -
nolike)
• Lógicos: -and, -or, -xor, -not, !
• De redirección: >, >>
• De división y combinación: -split, -join
• De tipo: -is, -isnot, -as
# Ciclo for
for ($i = 0; $i -lt 10; $i++)
{ ... }
# Ciclo foreach
foreach ($item in $array)
{ ... }
# Ciclo while
while ($variable -lt 5)
{ ... }
# Ciclo do while
do
{ ... } while ($variable -lt 10)
7. Funciones
En los scripts de PowerShell se pueden definir funciones para facilitar el armado de
scripts.
El siguiente es un script que utiliza una función de manera recursiva para calcular el
factorial de un número.
function Get-Factorial()
{
Param ([int]$value)
if($value -lt 0)
{
$result = 0
}
elseif($value -le 1)
{
$result = 1
}
else {
$result = $value * (Get-Factorial($value - 1))
}
return $result
}
$value = Read-Host 'Ingrese un nú
mero'
$result = Get-Factorial $value # $result = Get-Factorial -value $value
Write-Output "$value! = $result"
El uso de funciones, nos permite crear funcionalidades similares a los cmdlets y por tal
motivo, se brinda la directiva CmdLetBinding, que transforma nuestras funciones en una
especie de CmdLets proporcionando los parámetros comunes como –Verbose –Debug.
De la función anterior obtenemos el siguiente comportamiento:
7.1. Parámetros
A pesar de que se puede acceder a los parámetros del script con la variable $Args,
también es posible accederlos al igual que hacemos en Shell scripting $1, $2, etc. y
adicionalmente, podemos declarar parámetros con nombre y asignarle un tipo de datos
y validaciones.
Param(
[Parameter(Mandatory=$True, Position=1)] [string]$name,
[Parameter(Mandatory=$False)] $firstName
Salida:
Hola Nombre Apellido
Begin{<#Code#>}
Process{<#Code#>}
End{<#Code#>}
Esta estructura es similar a la de AWK, donde tenemos el bloque Begin, que se ejecutará
por única vez al comienzo de la invocación y el bloque End que se ejecutará por única
vez, al finalizar la ejecución. En cambio, el bloque Process veremos que se puede
ejecutar más de una vez si utilizamos la función en un pipeline de ejecución.
En el siguiente ejemplo veremos la iteración del bloque Process:
function Get-Multiplicacion()
{
[CmdletBinding()]
param([Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true
)]
[int]$value)
Begin
{
$result = 0
}
Process
{
Write-Output "Resultado parcial: $result"
if($value -lt 0)
{
$result = 0 }
elseif($value -le 1)
{
$result = 1
}
else
{
$result = $value * $result
}
}
End
{
Write-Output "Resultado Final: $result"
}
}
Resultado de la ejecución:
8. Uso de la Ayuda
Para obtener ayuda sobre los cmdlet existe el Get-Help, que nos brindará la información
funcional, sobre los parámetros, el modo de uso, entre otros temas.
PowerShell genera de forma automática, una hoja de ayuda con las funciones que
creamos, con la información básica. Por ejemplo, de la función anterior Get-Factorial,
obtenemos lo siguiente:
Esto nos brinda una ayuda estándar para todos los cmdlet y funciones de usuario que se
desarrollan. A continuación, veremos cómo explotar un poco más la utilización de la
ayuda.
function Verb-Noun
{
<# CODE #>
}
Agregando la sección de ayuda a la función Get-Factorial obtenemos el siguiente
resultado:
<#
.Synopsis
Esta funció
n calcula el factorial de un nú
mero de manera recursiva
.Description
Esta funció
n calcula el factorial de un nú
mero de manera recursiva
.Parameter value
Este parámetro indicaráa que número vamos a calcular el factorial
.Example
Get-Factorial -value 5
120
#>
function Get-Factorial()
{
Note que para obtener diferentes grados de información podemos utilizar los
parámetros – Example, –Detailed o –Full, los cuales irán mostrando un mayor detalle de
la ayuda informada en la metadata de la función.
Ejemplos de uso:
1- Ejecutar la función con Ids inexistentes:
PS> Detener-Proceso -Id 3324, 3325 -ErrorVariable errorKill -ErrorAction Stop
Ejecución de la instrucción:
PS> get-process -Name notepad* | Detener-Proceso -EA Stop -EV errorKill
El proceso 5344 fue detenido exitosamente
El proceso 4124 fue detenido exitosamente
En C:\Users\Public\Documents\Manuales\PowerShell\Scripts\pruebas.ps1: 15
Carácter: 17
++
o Sistema de Archivos
De forma predeterminada Get-ChildItem permite trabajar con el sistema de
archivos (crear, modificar, eliminar archivos y carpetas). La primera columna del
resultado tiene los siguientes significados:
d = directorio
a = archivo
r = sólo lectura
h = oculto
s = de sistema
Get-ChildItem
Para mostrar los archivos ocultos también
Get-ChildItem –force
o Para crear directorios:
New-Item –Path C:\Nuevo – Type Directory
o Para crear un archivo, si no indicas el tipo te lo pregunta:
New-Item –Path C:\Nuevo\Archivo.txt –Type File
o Para mover archivos o directorios:
Move-Item –Path C:\Nuevo\Archivo.txt C:\
Move-Item –Path C:\Nuevo C:\NuevoDir
o Para renombrar archivos (también con Move)
Rename-Item –Path C:\Archivo.txt C:\NuevoFile.txt
Rename-Item –Path C:\NuevoDir C:\Direc
o Para borrar archivos y directorios
Remove-Item –Path C:\NuevoFile.txt –Confirm
Remove-Item –Path C:\Direc
o Contenido de un archivo
Obtener el contenido:
Get-content C:\Windows\System32\drivers\etc\services
Obtener el contenido línea a línea:
Get-content C:\Windows\System32\drivers\etc\services |
ForEach-Object {write-host $i "" $_; $i++}
o Escribir en un archivo:
Set-Content –Path C:\Archivo.txt –Value “Hola, caracola”
o Añadir a un archivo:
Add-Content –Path C:\Archivo.txt –Value “Adios”
Out-File
Out-Null
Export-Csv
• Cadenas:
Select-String
• Manejo de colecciones de objetos:
Select-Object
Where-Object
ForEach-Object
Sort-Object
9.1. Ejemplos
Get-ChildItem
El cmdlet Get-ChildItem obtiene elementos y elementos secundarios de una ubicación
determinada. Es similar en concepto a un comando DIR para listar archivos en un
directorio.
Get-ChildItem -Path 'C:\' # List all files in the root directory.
Get-ChildItem -Path 'C:\' -Recurse # List all files on the C drive.
New-Item
El cmdlet New-Item crea un nuevo elemento del tipo dado en la ubicación de ruta
determinada.
New-Item -Path 'C:\' -Name 'PSTest' -ItemType Directory
New-Item -Path 'C:\PSTest' -Name 'Test.txt' -ItemType File -Value 'This is a
test.'
Move-Item
El cmdlet Move-Item mueve un elemento de la ubicación de ruta determinada al destino
especificado.
Move-Item -Path 'C:\PSTest\Test.txt' -Destination 'C:\PSTest\Test2.txt'
Copy-Item
El cmdlet Copy-Item copia un elemento de la ubicación de ruta determinada al destino
especificado.
Copy-Item -Path 'C:\PSTest\Test2.txt' -Destination 'C:\PSTest\Test.txt'
Remove-Item
El cmdlet Remove-Item elimina un elemento de la ubicación de ruta determinada.
Remove-Item -Path 'C:\PSTest\Test.txt'
Remove-Item -Path 'C:\PSTest' -Recurse
Test-Path
El cmdlet Test-Path determina si existe una ruta.
$filename = 'example.txt'
if((Test-Path $filename) -ne $true)
{
Write-Output "$filename not found!"
}
Set-Content
El cmdlet Set-Content es un cmdlet de procesamiento de cadenas que escribe o
reemplaza el contenido en el elemento especificado, como un archivo.
$path = $HOME + '\My PowerShell Content.txt'
$value = @('Colors', 'Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo',
'Violet')
Set-Content -Path $path -Value $value
Add-Content
El cmdlet Add-Content agrega contenido a un elemento o archivo especificado.
$path = $HOME + '\My PowerShell Content.txt'
Add-Content -Path $path -Value 'Brown'
Add-Content -Path $path -Value 'Black'
Get-Content
El cmdlet Get-Content obtiene el contenido de un elemento determinado.
Clear-Content
El cmdlet Clear-Content elimina el contenido de un elemento, como eliminar el texto de
un archivo, pero no elimina el elemento.
$path = $HOME + '\My PowerShell Content.txt'
Clear-Content -Path $path
Puede usar el Entorno de scripting integrado (ISE) de Windows PowerShell® para crear,
ejecutar y depurar scripts y comandos. Windows PowerShell ISE consta de la barra de
menús, las pestañas de Windows PowerShell, la barra de herramientas, las pestañas de
script, un panel de scripts, un panel de consola, una barra de estado, un control
deslizante de tamaño de texto y la ayuda contextual.
Barra de menús
La barra de menús contiene los menús Archivo, Edición, Ver, Herramientas, Depurar,
Complementos y Ayuda. Los botones de los menús permiten realizar tareas
relacionadas con la escritura y ejecución de scripts y la ejecución de comandos en
Windows PowerShell ISE.
Barra de herramientas
Los botones siguientes están ubicados en la barra de herramientas.
Botón Función
Nuevo Abre un nuevo script.
Abrir Abre un script o un archivo existente.
Guardar Guarda un script o un archivo.
Cortar Corta el texto seleccionado y lo copia en el Portapapeles.
Copiar Copia el texto seleccionado en el portapapeles.
Pegar Pega el contenido del Portapapeles en la ubicación del
cursor.
Borrar panel de Borra todo el contenido del panel de salida.
salida
Deshacer Invierte la acción que se acaba de realizar.
Rehacer Realiza la acción que se acaba de deshacer.
Ejecutar script Ejecuta un script.
Ejecutar selección Ejecuta una parte seleccionada de un script.
Detener la ejecución Detiene un script que se está ejecutando.
Nueva pestaña de Crea una nueva pestaña de PowerShell que establece una
PowerShell en sesión en un equipo remoto. Aparece un cuadro de diálogo
remoto que le pide que escriba los detalles necesarios para
establecer la conexión remota.
Iniciar Abre una consola de PowerShell.
PowerShell.exe
Pestaña Script
Muestra el nombre del script que se está editando. Puede hacer clic en una pestaña de
script para seleccionar el script que desea editar.
Cuando apunte a la pestaña de script, la ruta de acceso completa al archivo de script se
mostrará en una información sobre herramientas.
Panel de scripts
Permite crear y ejecutar scripts. Puede abrir, editar y ejecutar scripts existentes en el
panel de scripts.
Panel de salida
Muestra los resultados de los comandos y scripts que ha ejecutado. También puede
copiar y borrar el contenido en el panel de salida.
Panel de comandos
Permite escribir comandos. Puede ejecutar un comando de una línea o un comando de
varias líneas en el panel de comandos. Presione MAYÚS+ENTRAR para introducir cada
línea de un comando de varias líneas y presione ENTRAR después de la última línea para
ejecutarlo. El mensaje que aparece en la parte superior del panel de comandos muestra
la ruta de acceso al directorio de trabajo actual.
Barra de estado
Permite ver si los comandos y scripts que ejecuta se han completado. La barra de estado
se encuentra en la parte inferior de la pantalla. Las partes seleccionadas de los mensajes
de error se muestran en la barra de estado.
Ayuda
La ayuda de Windows PowerShell ISE está disponible en la biblioteca de TechNet en
Internet. Para abrir la Ayuda, haga clic en Ayuda de Windows PowerShell ISE en el menú
Ayuda o presione la tecla F1 en cualquier lugar excepto cuando el cursor esté en el
nombre de un cmdlet en el panel de scripts o en panel de consola. Desde el menú Ayuda
también puede ejecutar el cmdlet Update-Help y mostrar la ventana Comandos, que le
muestra todos los parámetros de un cmdlet para ayudarle a construir comandos, lo que
permite rellenar los parámetros en un formulario fácil de usar.
Windows PowerShell tiene varios alias de transición que permiten a los usuarios de UNIX
y Cmd usar nombres de comando conocidos en Windows PowerShell. Los alias más
comunes se muestran en la tabla siguiente, junto con el comando de Windows
PowerShell detrás del alias y el alias de Windows PowerShell estándar si existe uno.
Puede encontrar el comando de Windows PowerShell al que cualquier alias señala desde
Windows PowerShell mediante el cmdlet Get-Alias. Por ejemplo, escriba get-alias cls.
El aliasing asocia un nombre de comando que escribe a otro comando. Por ejemplo,
Windows PowerShell tiene una función interna denominada Clear-Host que borra la
ventana de salida. Si escribe el comando cls o clear en un símbolo del sistema, Windows
PowerShell interpreta que se trata de un alias de la función Clear-Host y ejecuta la
función Clear-Host.
La siguiente es una lista breve de comandos de Cmd.exe y UNIX comunes que puede
usar en Windows PowerShell:
Si usa uno de estos comandos de forma reflexiva y desea obtener el nombre real del
comando nativo de Windows PowerShell, puede usar el comando Get-Alias:
Para que los ejemplos sean más legibles, la Guía de usuario de Windows PowerShell
suele evitar el uso de alias. Sin embargo, saber más sobre los alias con antelación puede
resultarle útil si trabaja con fragmentos de código arbitrarios de código de Windows
PowerShell de otro origen o desea definir sus propios alias. En el resto de esta sección
se tratarán los alias estándar y cómo definir sus propios alias.
PowerShell están diseñados generalmente para ofrecer brevedad. Estos nombres más
cortos pueden escribirse rápidamente, pero son imposibles de leer si no sabe a qué
hacen referencia.
Internamente, Windows PowerShell usa estos comandos durante el inicio, pero estos
alias no se pueden cambiar. Si intenta ejecutar realmente uno de estos comandos,
obtendrá un error que indicará que no se puede modificar el alias. Por ejemplo:
PS> Set-Alias -Name gi -Value Get-Item
Set-Alias : Alias is not writeable because alias gi is read-only or constant and cannot be
written to.
At line:1 char:10
+ Set-Alias <<<< -Name gi -Value Get-Item