Professional Documents
Culture Documents
BLOQUE II WINDOWS
POWERSHELL
2013/2014
TABLA DE CONTENIDO
TABLA DE CONTENIDO ........................................................................... 1
1
Pgina
Pgina
Pgina
INTRODUCCIN
Es un lenguaje
Ofrece todas las comodidades que tiene cualquier shell de unix: historial de
comandos con las flechas, un fuerte soporte al autocompletado de rutas y
comandos, e incluso la posibilidad de crear alias. En PowerShell por fin
podrs no equivocarte al escribir ls ya que los comandos ms mticos de
Unix tienen su alias ya metido (Get-Alias).
1.2
ESCOGIENDO EL ENTORNO
Pgina
PowerShell ISE.
1.2.1
La consola interactiva
Pgina
Algunos pros:
1.2.2
Pgina
shortcut aplicado para copiar texto (Ctrl-C) aqu pasa a tener el significado de
detencin del comando. Parece evidente que esta operacin tambin pueda
realizarse desde el botn rojo en la barra de herramientas.
Pgina
1.2.3
Otros editores
1.3
LA AYUDA
Pgina
NOMBRE
Get-Service
SINOPSIS
Obtiene los servicios en el equipo local o en un equipo remoto.
SINTAXIS
Get-Service
[[-Name]
<string[]>]
[-ComputerName
DependentServices]
[-Exclude
<string[]>]
[-Include
RequiredServices] [<CommonParameters>]
<string[]>]
<string[]>]
[[-
DESCRIPCIN
El cmdlet Get-Service obtiene objetos que representan los servicios en un
equipo local o en un equipo remoto, incluidos los servicios en ejecucin y los
detenidos.
VNCULOS RELACIONADOS
Online version: http://go.microsoft.com/fwlink/?LinkID=113332
Start-Service
Stop-Service
Restart-Service
Resume-Service
Suspend-Service
Set-Service
New-Service
NOTAS
Pgina
se puede utilizar
tcnica.
1.3.1
Como resultado:
PS C:\Windows\system32> help *log*
Name
Category
Synopsis
----
--------
--------
Get-EventLog
Cmdlet
de eventos, o una lista de los...
Clear-EventLog
Cmdlet
registros de eventos especifica...
Pgina
10
Write-EventLog
de eventos.
Cmdlet
PowerShell
contiene
diferentes
comandos
ejecutables,
Pgina
11
1.4
COMANDOS Y CMDLETS
continuacin se pueden
especificar
varios
parmetros y
Y ejemplos:
get-help Write-Output examples
Pgina
12
Hello
PS (4) > Write-Output -IN Hello
Hello
PS (5) > Write-Output -i Hello
Hello
Autocompletado
El comando se expander a:
PS (2) > cd 'C:\Program Files'
Lo cual produce:
PS C:\Users\PORTATIL> $a="abcde"
______________________________________________________________________________
PS C:\Users\PORTATIL> $a.Length
5
______________________________________________________________________________
PS C:\Users\PORTATIL> $a.Substring(
Pgina
13
2 $a.Length
1.5
CATEGORAS DE COMANDOS
Cmdlets
Es la categora de comando ms eficiente para ser ejecutado. Es un
Funciones
Es un fragmento de sentencias de cdigo agrupadas bajo un
nombre, que reside en memoria mientras el intrprete est
ejecutndose y desaparece cuando se cierra.
Scripts
Son fragmentos de cdigo escritos en texto plano y con extensin
.ps1, que podrn ser guardados, cargados y ejecutados en el ISE.
Comandos nativos
Son programas externos que pueden ser ejecutados por el sistema
operativo. Implican la creacin de un nuevo proceso para el
comando, por lo tanto, son ms lentos.
Pgina
14
1.6
MSDN:
http://msdn.microsoft.com/enus/library/windows/desktop/ms714657(v=v
s.85).aspx
1.7
ENTRADA/SALIDA
1.7.1
Salida bsica
Para realizar una impresin por pantalla se utiliza el comando WriteOutput, que necesita de un argumento (como recordars era posible omitir el
parmetro InputObject.
Segundo ejemplo:
<#:: example2.ps1 ::
Eugenia Prez Martnez 15rithme_perez@cuatrovientos.org
Basic I/O, simple example of reading from console.
When you read from console the type of data is string
so you need to cast to int if you need to make any 15arithmetic op.
#>
Pgina
15
1.7.2
Entrada bsica
El comando utilizado para leer informacin desde la consola es el ReadHost. Todo lo que se lee se guarda en una variable, que implcitamente ser de
tipo string. Este cmdlet se puede usar para solicitar al usuario que proporcione
datos. Dado que la entrada se puede guardar como una cadena segura, puede
usarse para solicitar a los usuarios que proporcionen datos seguros, como
contraseas, as como datos compartidos. De esta forma, deberemos aadirle
el parmetro assecurestring, ocultando la entrada de datos en el cuadro de
dilogo. La salida se almacenar en un objeto SecureString.
1.7.3
Uso de comentarios
Como puedes observar los comentarios de una lnea van precedidos del
smbolo #. Tambin podras realizar comentarios multilnea de la siguiente
forma:
<# :: Example1 ::
Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
Este es un comentario
que ocupa varias
lneas #>
Write-Output "Hello 1DAM"
1.8
EJECUCIN DE SCRIPTS
Pgina
16
PS C:\>
C:\Cuatrovientos\DAM\SI\U.T.5\powershell\examples\example1.ps1
C:\Cuatrovientos\DAM\SI\U.T.5\powershell\examples\example1
1.9
1.9.1
Descripcin
[int]
System.Int32
[long]
System.Int64
Pgina
17
[string]
System.String
Cadena unicode
[char]
System.Char
Un carcter unicode de 16
bits
[byte]
System.Byte
[bool]
System.Boolean
Booleano, True/False
[decimal]
System.Decimal
Nmero
con
decimales
de
128bits
[single]
System.Single
[double]
System.Double
[xml]
System.Xml.XmlDocument
Objeto Xml
[array]
System.Array
Un array de valores
[hashtable]
System.Collections.Hashtable
Un Hashtable
BaseType
--------
True
System.Object
True
String
1.9.2
Casting
Para realizar el casting, bastar con indicar el valor el tipo al que se desea
convertir, y si es posible, se realizar la conversin. Ejemplo de error:
PS C:\> $test = [int]$name
No se puede convertir el valor "Eugenia" al tipo "System.Int32". Error: "La
cadena de entrada no tiene el formato correcto."
Pgina
18
1.9.3
Variables
Name
Value
----
-----
variable
Eugenia
Ejemplo3:
<#:: example3.ps1 ::
Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
Shows the use of the definition of basic types in PowerShell
#>
#strings
$string1 = "This is a string in double quotes"
Write-Output
"$string1
variable:"$string1.getType().FullName
The
type
of
this
Pgina
19
Write-Output
"$string2
variable:"$string2.getType().FullName
The
type
of
this
# Numbers
$num1 = 3
Write-Output "$num1 - The type of this variable:"$num1.getType().FullName
$num2 = 4d
Write-Output "$num2 - The type of this variable:"$num2.getType().FullName
$num3 = 4.2
Write-Output "$num3 - The type of this variable:"$num3.getType().FullName
$num4 = 4.2d
Write-Output "$num4 - The type of this variable:"$num4.getType().FullName
#Expression
Write-Output "The result of adding:" $($num1 + $num2 + $num3 + $num4)
The
type
of
this
#Date
$date = $(Get-Date)
Write-Output "$date - The type of this variable:"$date.getType().FullName
1.9.4
Arrays
Pgina
20
Hay varias formas de definir, no es rgido con los tipos pero s un poco
con los ndices. No puedes crear un elemento donde quieras aunque s los
puedes aadir posteriormente.
Los elementos de un array no necesitan ser todos del mismo tipo, a no
ser que lo declares de esa forma.
Vamos a ver de forma prctica ejemplos de uso:
<#
:: example4.ps1 ::
Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
Shows the use of the arrays
#>
$myNumbers[1]
$myNumbers[-1]
$myNumbers[-2]
Pgina
21
1.9.5
Hashtables
Pgina
22
1.9.6
XML,
XML
siglas
en
ingls
de
Pgina
23
Pgina
24
1.10
OPERADORES Y EXPRESIONES
1.10.1
Operador de concatenacin
string"
"
splitted
into
different"
"
Pgina
25
1.10.2
Operadores aritmticos
1.10.3
Operadores de asignacin
1.10.4
Operadores de comparacin
Pgina
26
1.10.5
1.11
Operadores lgicos
Pgina
27
param (
[int]$opcion1=42,
[string]$opcion2="otrovalor"
)
1.12
1.12.1
ESTRUCTURAS DE CONTROL
La estructura condicional
Por ejemplo:
<# example8.ps1
Shows the use of if statement
Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
#>
Pgina
28
{
$textToMatch -like $pattern
}
elseif($matchType -eq "2")
{
$textToMatch -match $pattern
}
else
{
Write-Host "Debes indicar el nmero 1 o bien el 2..."
}
1.12.2
Estructura de Switch
Cuando necesitamos llevar a cabo una accin segn el valor que tenga
una nica variable en lugar de utilizar una serie de ifelse utilizamos una
estructura switch.
switch options expression
Pgina
29
{
comparison value { statement block }
O bien:
{ comparison expression } { statement block }
(...)
default { statement block }
}
O bien
{ comparison expression } { statement block }
(...)
default { statement block }
}
Por ejemplo:
<# example9.ps1
Shows the use of the switch statement
Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
#>
switch ($number) {
1 { Write-Output "The meaning of life" }
2 { Write-Output "This number symbolizes opposition and conflicts" }
3 { Write-Output "This is the fundamental number" }
4 { Write-Output "Symbolically number 4 represents the cross and quadrant"
}
5 { Write-Output
aspects." }
"This
symbolizes
the
union
of
heavenly
and
worldly
Pgina
30
#In the result strings, you can see that $_ was replaced by the full string of
the actual
#switch value. For example:
switch (8) {
{$_ -gt 3} {"greater than 3"}
{$_ -gt 7} {"greater than 7"}
}
#Notice that you can combine values and expressions (these with {})
switch(1,2,3,4,5,6) {
{$_ % 2} {"Odd $_"; continue}
4 {"FOUR"}
default {"Even $_"}
}
<#$dll=$txt=$log=0
switch -wildcard (dir c:\windows){
*.dll {$dll++}
*.txt {$txt++}
*.log {$log++}
}
Pgina
31
$dll=$txt=$log=0
switch -wildcard (dir) {
*.dll {$dll+= $_.length; continue}
*.txt {$txt+=$_.length; continue}
*.log {$log+=$_.length; continue}
}
#Processing files
switch -regex -file c:\windows\windowsupdate.log {
'START.*Finding updates.*AutomaticUpdates' {$au++}
'START.*Finding updates.*Defender' {$du++}
'START.*Finding updates.*SMS' {$su++}
}
1.12.3
while
:loop_label while(condition)
{
statement block
}
Do-while
:loop_label do
{
statement block
} while(condition)
O bien:
:loop_label do
{
statement block
} until(condition)
Pgina
32
do {
Write-Output "Guess the number"
$guess = Read-Host "Try: $count"
$count++
} while($number -ne $guess)
1.12.4
El bucle for
Por ejemplo:
<# example11.ps1
Shows the use of the for loop structure
Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
#>
Pgina
33
1.12.5
El bucle foreach
Por ejemplo:
<# example12.ps1
Shows the use of the foreach loop structure
Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
#>
# Counts the number of files with TXT extension and their lengths.
$count,$l = 0, 0
foreach ($f in dir *.txt) {
$count++
$l += $f.Length
}
Pgina
34
Write-Output "The number of TXT files: $count , and the total length: $l"
Pgina
35
o
$total = 0
dir | ForEach-Object {$total += $_.length }
Write-Output $total
1.12.6
Pgina
36
if($counter2 -eq 2)
{
break outer_loop
}
Write-Host "Processing item $counter,$counter2"
}
}
1.13
EXPRESIONES REGULARES
Las expresiones regulares son una potente herramienta que nos permite
hacer bsquedas de texto, comprobar validez de datos.
Pgina
37
lenguajes
de
programacin
disponemos
de
una
herramienta
llamada
Pgina
38
$ : terminado en
^ : empieza por
Cuantificadores:
+ : 1 o ms: [09]+
{1,4} : de 1 a 4 ocurrencias
{3,} : mnimo de 3
Metacaracteres
\d : dgitos [09]
\D : NO dgitos
\w : palabras [azAZ09]
\W: NO palabras
\S : NO espacios [ \t\n\x0b\r\f]
Para hacer uso de estos patrones o expresiones regulares, se suelen utilizar los
operadores:
Pgina
39
Por ejemplo:
# example14.ps1
# Shows the use of regular expressions
# Eugenia Prez Martnez - eugenia_perez@cuatrovientos.org
Write-Output $newEmail
# To remove something
$greet= "Hello 1 DAM"
$newGreet= $greet -replace "Hello"
Write-Output $newGreet
Pgina
40
1.14
FICHEROS
1.14.1
Pgina
41
Por ejemplo:
Get-Content myfile.txt
Y para eliminarlo:
remove-item c:\file1.txt
Pgina
42
1.14.2
Split
Un uso habitual de PS es procesar ficheros de log para extraer
informacin relevante. Para lo cual es necesario fragmentar las lneas de
ficheros por un carcter delimitador.
#Si no se indica nada, el delimitador ser el espacio en blanco
"Hello there world".Split()
"Hello there
world".Split()
world".split(" ",[StringSplitOptions]::RemoveEmptyEntries)
there world".Split().length
Da como resultado 6.
Si quisiramos obtener aquellas palabras nicas:
$uniq = $words | sort Unique
$uniq.count
Join
Es un operador que realiza la operacin contraria a Split. Permite unir
contenido y que sea tratado como un string o un array.
Pgina
43
Se obtiene: 1+2+3
1.14.3
Realizando bsquedas
ste busca en todos los archives .txt del directorio actual las lneas que
contengan la cadena .
select-string -path *.xml -pattern "Windows"
Pgina
44
1.14.4
Pgina
45
Nota: Los ficheros CSV (del ingls comma-separated values) son un tipo
de documento en formato abierto sencillo para representar datos en forma de
tabla, en las que las columnas se separan por comas y las filas por saltos de
lnea. Los campos que contengan una coma, un salto de lnea o una comilla
doble deben ser encerrados entre comillas dobles.
Otra opcin para tratar con ficheros CSV sera el comando Importcsv que
nos carga un fichero de este tipo directamente en un array.
1.14.5
Import-CSV
Convierte las propiedades de objeto de un archivo CSV (valores separados
por comas) en versiones CSV de los objetos originales.
get-process | export-csv processes.csv
Pgina
46
1.14.6
Convirtiendo a HTML
1.15
FUNCIONES
Pgina
47
"Passed parameters"
foreach ( $param in $args) {
$param
}
}
"Greetings to:"
foreach ($name in $args) {
$name
}
}
Pgina
48
$bmi = 0
"BodyMassIndex $bmi"
}
Pgina
49
divValues 50 2
divValues -value2 2 -value1 50
add
add 5
add 5 6
dow
dow "feb 16, 2014"
Pgina
50
showX 5
#Shows an exception because the x argument should be needed
#showX
get-soup
get-soup -please
get-soup -please tomato
1.16
MDULOS
$count = 0
$increment = 1
Pgina
51
function Get-Count
{
return $count += $increment
}
function Reset-Count
{
$count=0
setIncrement 1
}
A continuacin vamos a hacer que este script pase a ser un mdulo con la
siguiente orden:
copy example18.ps1 example18.psm1 -Force Verbose
Finalmente tendremos que cargarlo para poder hacer uso del mismo:
Import-Module .\example18.psm1
Get-Count
1
______________________________________________________________________________
PS C:\Windows\system32>
Get-Count
1
_____________________________________________________________________________
PS C:\Windows\system32>
Get-Count
Pgina
52
$script:count = 0
$script:increment = 1
function Get-Count
{
return $script:count += $increment
}
function Reset-Count
{
$script:count=0
setIncrement 1
}
Get-Count
1
______________________________________________________________________________
PS C:\Windows\system32>
Get-Count
2
_____________________________________________________________________________
PS C:\Windows\system32>
Get-Count
3
Adicionalmente podramos hacer que el contador se resetease:
PS C:\Windows\system32> Reset-Count
______________________________________________________________________________
Pgina
53
PS C:\Windows\system32>
Get-Count
1
PS C:\Windows\system32> setIncrement 7
______________________________________________________________________________
PS C:\Windows\system32> Get-Count
8
Count o bien Reset-Count), es decir, setIncrement, nos dar un error como era
de esperar:
PS C:\Windows\system32> setIncrement 4
El trmino
archivo de
el nombre
correcta e
En lnea: 1 Carcter: 13
+ setIncrement <<<<
+ CategoryInfo
CommandNotF oundException
ObjectNotFound:
(setIncrement:String)
[],
+ FullyQualifiedErrorId : CommandNotFoundException
______________________________________________________________________________
PS C:\Windows\system32> Get-Count
1
Pgina
54
2.1
EJERCICIO 1
Nombre,
Edad,
si es mayor de edad,
salario
y la fecha de hoy.
2.2
EJERCICIO 2
Realiza el ejercicio anterior, pero pidiendo los datos por pantalla en lugar
de inicializando t las variables.
2.3
EJERCICIO 3
2.4
EJERCICIO 4
2.5
EJERCICIO 5
Pgina
55
2.6
Crea
EJERCICIO 6
script
un
que
solicite
al
usuario
un
2.7
EJERCICIO 7
2.8
Crea
EJERCICIO 8
un
script
que
espere
dos
parmetros
un
llamado
2.9
EJERCICIO 9
2.10
EJERCICIO 10
Desarrolla
un
cmdlet
de powershell que
defina
un
array
de
10
Pgina
56
nmeros inicializados a 0.
Random).
Una vez generado ese array debes hacer otro bucle for que contabilice
cuntos nmeros positivos, negativos e iguales a 0 hay en ese array.
2.11
EJERCICIO 11
otros shell conocidos) Por ejemplo, help md o bien help cd, etc
2.12
EJERCICIO 12
de
un
array
con
los
siguientes
caracteres:
('a','b','c','d','$','.','&','0','8','9')
Solicita por pantalla una longitud para tu contrasea, que deber estar
entre 3 y 10 caracteres; si no haz que el usuario vuelva a introducir dicha
longitud.
A continuacin debers ir componiendo la contrasea carcter a carcter
con los indicados anteriormente. Para ello obtn las posiciones de forma
aleatoria. Por ejemplo, la primera iteracin obtendr la 3 de forma aleatoria,
luego mi contrasea debera empezar por d.
Una vez que lo tengas hecho, haz que el ejercicio anterior genere los
nombres de directorios a partir de este cmdlet.
2.13
EJERCICIO 13
Pgina
57
2.14
Crea
cuatro
EJERCICIO 14
un
script que
operaciones
muestre
disponibles:
crear
un
men
directorio,
al
usuario
eliminar
con
directorio,
2.15
EJERCICIO 15
2.16
EJERCICIO 16
Pgina
58
2.17
EJERCICIO 17
nombre_cuenta
nombre completo
password
grupo (al que pertenece)
Aadir un usuario
Eliminar un usuario
Mostrar todos
2.18
EJERCICIO 18
un
$numbers = 0,1,2,3,4,5,6,7,8,9
2.19
EJERCICIO 19
Pgina
59
Crea
un
cmdlet
de powershell que
defina
una
funcin
llamada
Identidad: nombre_apellido
2.20
Crea
EJERCICIO 20
un
cmdlet
de powershell que
defina
una
funcin
llamada
Pgina
60
generateName 3
susana
2.21
EJERCICIO 21
2.22
EJERCICIO 22
Add
Minus
Multiply
Divide
2.23
EJERCICIO 23
Pgina
61
3 UTILIZAR
POWERSHELL
PARA
TAREAS
DE
ADMINISTRACIN
http://technet.microsoft.com/es-es/library/dd315304.aspx
Pgina
62
4 BIBLIOGRAFA Y REFERENCIAS
Pgina
63