microsoft windows server 2008 powershell julián blázquez garcía jblazquez@informatica64.com...

Post on 14-Apr-2015

17 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Microsoft Windows Server 2008Microsoft Windows Server 2008

PowerShellPowerShell

Julián Blázquez García

jblazquez@informatica64.com

HOL-WIN34

Agenda

• PowerShell

• Cmdlets

• Unidades

• Scripting

• Objetos

• Gestión aplicaciones y objetos

• Tareas de administración

¿Windows PowerShell?

• Es un entorno de línea de comandos

• Acepta comandos de la línea de comandos estándar

• Permite acceder al sistema de archivos, al registro y al almacén de certificados

• Permite la ejecución de Script

• Incluso se pueden lanzar los Script desde la línea de comandos estándar

Windows PowerShell

Apariencia Similar

¿Por qué usar PowerShell?

• La necesidad de extender los sistemas de Scripting

• Sistema más robusto

• Extensible a tareas de administración de sistemas y para el desarrollo

• Integración de entornos (por ejemplo Exchange)

• Evolución de los sistemas de comandos utilizados

Entorno PowerShell

• Presenta una Shell de símbolo de sistema interactivo

• Entorno de scripting

• Ejecución de comandos y aplicaciones

• Interacción local y remota

• Creado sobre Common Language Runtime de .NET y .NET Framework

Disponibilidad PowerShell

• Sistemas Operativos compatibles con PowerShell• Windows XP SP2• Windows Server 2003 SP1• Windows Vista• Windows Server 2008

• Requisitos para su instalación:– Descargar PowerShell para el sistema operativo en

http://www.microsoft.com/technet/scriptcenter/topics/msh/download.mspx

– Instalado Microsoft .Net Framework 2.0

Agenda

• PowerShell

• Cmdlets

• Unidades

• Scripting

• Objetos

• Gestión aplicaciones y objetos

• Tareas de administración

Cmdlets – Introducción

• Diseñados para usar objetos

• Trabajan como comandos binarios

• Se utilizan para agregar proveedores de Windows

• Utilizan la sintaxis de C#

• Su nomenclatura es mediante sustantivos y verbos

Listado cmdlets

• Get-command

Listado de cmdlest

• Para visualizar los cmdlets con verbo:

– Get-command –verb verbo– "get" sólo recuperan datos– "set" sólo establecen o modifican los datos– "format" sólo aplican formato a los datos– "out" sólo dirigen la salida a un destino determinado.

• Para ordenarlos por familias para un objeto:

– Get-comand –noun objeto p.e: service, process …

Sintaxis

• Los cmdlet contienen cada uno una sintaxis determinada.

• Mediante el parámetro –Syntax podemos recuperar la sintaxis de los cmdlet

– Get-command –syntax

• Para cmdlet específico

– Get-command –syntax cmdlet

Comandos y cmdlets

• No todos los comando que utilizamos son cmdlets aunque lleven sustantivo y verbo

• Aquí tenemos un ejemplo de función interna.

– Clear-host

• Para obtener todos los comandos

– Get-command *

• Los comandos pueden filtrarse

– Get-command –commandtype tipo (Alias, function, application)

Parámetros

• Powersell procesa los parámetros de forma directa.

• Los nombres de parámetros se utilizan siempre con un guión (-) como prefijo.

• Por ejemplo cuando a un cmdlet le aplicamos el parámetro -? nos muestra la ayuda.

Parámetros convencionales

• Whatif

• Confirm

• Verbose

• Debug

• Warn

• Erroraction

• Errorvariable

• Outvariable

• Force

• Exclude

• Include

• Passthru

• Path

• CaseSensitive

• Outbuffer

Ayuda

• Para solicitar la ayuda podremos operar con la siguiente sintaxis:

– Get-help cmdlet

– Man cmdlet

– Help cmdlet

– cmdlet -?

Alias

• El sistema trabaja mediante alias o abreviados

• Para obtener los alias podremos realizarlo mediante este filtro:

– Get-command –commandtype alias

• Si queremos obtener el comando que invoca el alias

– Get-alias alias

• Creación de alias.

– Set alias –name alias –value valor

Canalización de objetos

• Actúan como tubos conectados de tal forma que los objetos pasan a través de cada tubo.

• La canalización se establece mediante el carácter “|”.

• Cada comando suele pasar su resultado al siguiente comando

• Reducen la demanda de recursos obteniendo resultados más inmediatos.

Salida de datos mediante pipe

• Podemos controlar los recursos del sistema.– Comprobar rendimiento del procesador con ambas instrucciones

• Get-childitem c:\windows –recurse

• Get-childitem c:\windows –recurse | out-host -paging

Cambios de formato

• Powershell presenta una serie de cmdlets para controla las propiedades que se muestran de objetos específicos.

• Comienzan por el verbo format:

– Format-Wide.

– Format-List.

– Format-Table.

– Format-Custom

Ejemplos

• Sacar por lista

– Get-process –name proceso | format-list

• Por tabla

– Get-process –name proceso | format-table.

• Mediante autoformato.

– Get-process –name proceso | format-table –property path,name,id,company -autosize

Comodines

• Los cmdlets y comandos admiten el uso de comodines.

• Son útiles cuando queremos obtener todos los datos de un objeto.

– Get-process –name proceso | format-list –property *

Agrupando datos

• Los datos obtenidos cuando devuelven listas grandes pueden ser difíciles de comparar.

• Mediante el parámetro Groupby podemos agrupar el resultado en función del valor de una propiedad.

– Get-process –name * | format-table –wrap –autosize –groupby propiedad

Salida de datos• PowerShell está orientado a ofrecer los objetos

obtenidos por pantalla aunque podríamos sacarlos por otras ubicaciones.

• La salida presenta el verbo out.

• Por defecto la salida es por out-host.

• La especificación de la salida es importante hacerlo correctamente. P.ej. no es lo mismo– Get-process | out-host –paging | format-list

– Get-process | format-list | out-host –paging

• Las salidas deben establecerse al final de la sintaxis.

Tipos de salidas

• Salida por pantalla– Out-host –paging– More

• Imprimir datos.– Out-printer– Por defecto utiliza la predeterminada si queremos utilizar alguna

específica utilizaremos el parámetro –name impresora

• Fichero.– Out-file– Crea por defecto un fichero en formato unicode, si queremos

formato ASCII utilizaremos el parámetro –encoding ASCII.

Agenda

• PowerShell

• Cmdlets

• Unidades

• Scripting

• Objetos

• Gestión aplicaciones y objetos

• Tareas de administración

Introducción

• Powershell define diferentes tipos de unidades a las que se puede tener objeto.

– Unidades lógicas de disco y almacenamiento.

– Alias

– Funciones

– Contenedor de certificados.

• Usuario

• Equipo

Introducción

– Registro.

• Clave HKEY_Current_User

• Clave HKEY_Local_Machine

– Entorno

– Variables

Unidades

• Para obtener las unidades utilizaremos el cmdlet:– Get-psdrive

• Si queremos diferenciarlos por proveedor– Get-psdrive –psprovider proveedor

Creación y eliminación unidades

• Crear nuevas unidades utilizadas exclusivamente por PowerShell que pueden definir alias de unidades

– New-psdrive –name nombre –psprovider proveedor –root ruta

• Eliminar unidades

– Remove-psdrive –name nombre

Archivos y carpetas

• Como otras Shell, PowerShell permite la gestión de ficheros y carpetas.

• Se pueden utilizar dir o ls aunque tienen sintaxis propias tipo verbo/sustantivo como get-childitem

• Para devolver los resultados dentro de los contenedores se utiliza el parámetro –recurse

• Si queremos obtener los elementos ocultos utilizaremos el parámetro -force

Filtrados y comodines

• Podremos filtrar elementos mediante el parámetro name

• Podremos utilizar caracteres comodines para controlar las búsquedas:

– *

– ?

– [ ] (búsqueda de caracteres que coincidan)

• Podremos excluir elementos mediante el parámetro exclude

Creación de elementos

• Pueden crearse elementos mediante la sintaxis cmdlets con el parámetro new-item y el valor file o directory.

– New-item –path ruta –itemtype directory

– New-item –path ruta –itemtype file

Trabajo con elementos

• Cambiar nombres: rename-item

• Mover elementos: move-item

• Copiar elemento: copy-item

• Eliminar elementos: remove-item

• Ejecutar elementos: invoke-item

Agenda

• PowerShell

• Cmdlets

• Unidades

• Scripting

• Objetos

• Gestión aplicaciones y objetos

• Tareas de administración

Scripting

• Scripting a través de línea de comandos

• Política de Ejecución

• Ejecutar scripts

– CScript

– WScript

– Windows PowerShell Scripts

Script Línea de Comandos

• Todas las variables empiezan con el carácter “$”

• Las variables mantienen sus valores durante toda la sesión del usuario

• Al cerrar la sesión las variables se eliminan

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> $a = 4PS C:\Scripts> $b = 6PS C:\Scripts> $a + $b10

Script Línea de Comandos

• Permite instrucciones de control de flujo

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> $a = 4PS C:\Scripts> $b = 6PS C:\Scripts> $a + $b10PS C:\Scripts> if ($a –gt $b)>> {$a}>> else>> {$b}>>6PS C:\Scripts>

Script Línea de Comandos

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> $a = Get-ServicePS C:\Scripts> $a

Status Name DisplayName------ ---- -----------Running AeLookupSvc Experiencia con aplicacionesStopped Appinfo Información de la aplicaciónStopped AppMgmt Administración de aplicacionesRunning Browser Examinador de equiposStopped CertPropSvc Propagación de certificadosStopped COMSysApp Aplicación del sistema COM+Running CryptSvc Servicios de cifradoRunning Dhcp Cliente DHCPRunning Dnscache Cliente DNS...

Scripts en Archivos

• Crear los scripts con la aplicación Notepad

• Salvar los archivos con extensión .ps1

$a = 4$b = 6“a = “ + $a“b = “ + $bif ($a –gt $b){ “a es mayor que b”}else{ “a no es mayor que b”}

Script que asigna valores a dos variables y comprueba cual es mayor.

Ejecutando Scripts

• Los scripts de PowerShell tienen extensión .ps1• Se debe especificar la ruta completa, aunque se

encuentre en la ruta actual• O añadir la ruta a la variable de entorno Path

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> C:\Scripts\Script.ps1

a = 4b = 6a no es mayor que b

PS C:\Scripts>

Políticas de Ejecución

• La política de ejecución determinan que Script podrá ser ejecutado en la máquina local

• Cuatro políticas de Ejecución– Restricted (por defecto)

• PowerShell no permite la ejecución de Scripts

– AllSigned• Únicamente Scripts firmados por publicadores de confianza

– RemoteSigned• Los firmados y los creados localmente en la máquina

– Unrestricted• Se ejecutarán todos los scripts

Políticas de Ejecución

• Usar el cmdlet Get-ExecutionPolicy para descubrir que política de ejecución se está aplicando

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> Get-ExecutionPolicy

Restricted

PS C:\Scripts> ./Script.ps1

File “get-help about_signing” for more details.At line:1 char:9+ .\Script.ps1 <<<<

Políticas de Ejecución

• Usar el cmdlet Set-ExecutionPolicy para modificar la política de ejecución a aplicar

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> Set-ExecutionPolicy Unrestricted

PS C:\Scripts> ./Script.ps1

a = 4b = 6a no es mayor que b

Scripts VBScript

• Se pueden ejecutar script escritos en VBScript desde PowerShell

• Se deben ejecutar mediante los comandos CScript o WScript

• Las políticas de ejecución no se le aplican a estos script

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> Get-ExecutionPolicy

Restricted

PS C:\Scripts> WScript test.vbs

Test VBScript

Perfiles

• Windows PowerShell ejecuta un script cada vez que se inicia sesión

• El script que se ejecuta es el que apunta la variable $Profile

• Por defecto $Profile apunta a My Documents\ WindowsPowerShell\Microsoft.PowerShell_Profile.ps1

• Se puede editar el perfil con el bloc de notas

• El perfil no se ejecuta si las políticas de ejecución está en Restricted

Crear un Perfil

• Para comprobar si existe o no un perfil creado:

• Para crear el perfil se debe ejecutar:

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> Test-path $Profile

False

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> New-Item -Path $profile -ItemType file -Force

Agenda

• PowerShell

• Cmdlets

• Unidades

• Scripting

• Objetos

• Gestión aplicaciones y objetos

• Tareas de administración

Objetos

• Powershell trabajo con objetos com y .net.

• Dentro de los objetos más importantes con los que podemos trabajar en administración se encuentran los objetos de WMI.

• El acceso a objetos WMI se realiza mediante el cmdlet get-wmiobject que permite enumerar las clases de WMI

WMI Remoto

• Podemos utilizar PowerShell para acceder a un equipo remoto mediante el parámetro –computername

Get-wmiobject –list –computername 192.168.0.1

• La cuenta utilizada debe pertenecer al grupo de administradores

• No es necesario que el equipo remoto tenga instalado PowerShell.

Obtención detallada de clases

• Si conocemos el nombre de una clase WMI podemos obtener la información.

– Por ejemplo una de las clases más utilizadas es Win32_operatingsystem

• Get-WmiObject -Class "Win32_OperatingSystem" -Namespace "root/cimv2 "

– Como esta clase presenta más propiedades podremos recuperarlas mediante Get-Member:

• Get-WmiObject -Class "Win32_OperatingSystem" -Namespace "root/cimv2 “ | Get-Member –MemberTypeProperty

Utilización de objetos

• Muchos componentes com y .net permiten realizar muchas tareas que amplían las funcionalidades de cmdlets.

• Muchos comandos cmdlets no se pueden utilizar remotamente frente a los componentes com y .net

• Pueden crearse instancias de una clase .Net mediante el cmdlet New-object

Almacenamiento en variables

• El uso de objetos para más de un uso dentro de la sesión puede referenciarse mediante variables:

– $app = new-object –typename system.diagnostics.eventlog –argumentlist application

– Genera la variable $app donde se almacena un registro de eventos para el registro aplicación.

• Podremos acceder remotamente proporcionando la IP o el nombre de equipo remoto como argumentos.

– New-object –typename system.diagnostics.eventlog application,192.168.0.1

Agenda

• PowerShell

• Cmdlets

• Unidades

• Scripting

• Objetos

• Gestión aplicaciones y objetos

• Tareas de administración

Aplicaciones

• Muchas aplicaciones pueden automatizarse mediante objetos

• Algunas de las más utilizadas con Internet Explorer o Microsoft Office

• Utilizaremos I.E. como referencia mediante su ProgID: InternetExplorer.Application

Creación de la instancia

• $ie1 = new-object –comobject internetexplorer.application

– Podemos comprobar que se está ejecutando mediante get-process aunque no lo veamos.

– El valor visible se encuentra por defecto en false.

• Para poder ver las propiedades y métodos de I.E.

– $ie1 | get-member

• Si queremos hacer visible la ventana del I.E.

– $ie1.visble = $true

Uso de I.E. desde Powershell• Para ir a una url utilizaremos el método navigate:

– $ie1.navigate(“http://www.informatica64.com”)

• Permiten recuperar el contenido del texto HTML.– $ie1.Document.body.innertext

• Para cerrar el objeto utilizamos el método quit()– $ie1.quit()

• Aunque cerremos el objeto sigue apareciendo como un objeto com, para volverlo a utilizar deberemos eliminar la referencia– Remove-variable ie1– $ie1 = $null

Uso de clases

• No todas las clases de .net framework pueden crearse mediante new-object.

• Determinadas clases no hay que crearlas puesto que ya están creadas, solamente hay que utilizarlas.

• Estas clases se denominan estáticas puesto que no pueden crearse ni eliminarse.

Clases estáticas

• Cuando las definamos deben ir entre corchetes.

– [system.environment]

• El uso de miembros estáticos necesitarán especificar el parámetro static:

– [system.environment] | get-member -static

Ejemplos de clase estática

• [system.environment]::commandline

• [system.environment]::osversion

• [system.environment]::username

• [system.environment]::machinename

• [system.environment]::systemdirectory

Variables

• PowerShell admite la generación de variables

• Para mostrar la información de una variables puede utilizarse get-member

• PowerShell permite la manipulación de variables.– Para ver una lista completa de manipulaciones:

• Get-command –noun variable | format-table –propertyname,definition –autosize –wrap

• Podremos conocer todas la variables mediante la sentencia– Get-childitem variable

Agenda

• PowerShell

• Cmdlets

• Unidades

• Scripting

• Objetos

• Gestión aplicaciones y objetos

• Tareas de administración

Introducción

• Una de las funcionalidades más importantes que podremos encontrar en PowerShell es la administración de los sistemas.

• La administración puede ser local o remota.

• Permite combinar cmdlets con aplicaciones externas.

Administración de Procesos

• Uno de los elemento fundamentales es el control de los procesos

• Estos se realizan a través de dos cmdlets:

– Get-process

– Stop-process

• Get-process proceso

• Admite el uso de comodines y los modificadores -name e -id

Parar Procesos

• Podremos parar procesos mediante la orden stop-process

• Para ordenes en las cuales no queramos equivocarnos podremos utilizar el parámetro -confirm

Windows PowerShellCopyright (C) 2006 Microsoft Corporation. Reservados todos los derechos.

PS C:\Scripts> Stop-Process iexplorer

Confirmar¿Está seguro de que desea realizar esta acción?Realizando la operación "Stop-Process" en el destino "iexplore (3916)".[S] Sí [O] Sí a todo [N] No [T] No a todo [U] Suspender [?] Ayuda (el valor predeterminado es "S"): s

Administración de servicios• Podemos gestionar los servicios de un sistema mediante

los cmdlets service– Get-service

• Mediante –displayname podremos buscar un servicio por el nombre para mostrar.

• Los servicios pueden iniciarse, suspenderse o reiniciarse:– Stop-service

– Start-service

– Suspend-service

– Restart-service

Obtención de Datos con WMI

• Mediante Get-Wmiobject podremos obtener la configuración fundamental de Windows.

• Podremos obtener la información localmente mediante ‘.’ o mediante la IP de un equipo remoto.

Ejemplos

• Obtener datos de la BIOS– Get-wmiobject –class win32_bios

• Obtener datos del procesador.– Get-wmiobject –class win32_processor

• Mostrar actualizaciones instaladas.– Get –wmiobject –class win32_quickfixengineering

• Mostrar usuarios– Get-wmiobject –class win32_operatingsystem | select-object –

property *user*

Aplicaciones instaladas

• Aplicaciones que están instaladas

– Get-wmiobject –class win32_product

• Aplicaciones que pueden desinstalarse

– New-psdrive –name uninstall –psprovider registy-root HKLM:\software\microsoft\windows\ currentversion\uninstall

Instalar aplicaciones

• La clase win32_product permite instalar paquetes .msi

• En el caso de instalaciones remotas deberos especificar la ruta del paquete como una ruta de red UNC

• (get-WMIobjec –computername IP o nombre –list | where object –filterscript {$_.name-eq “Win32_Product”)} .invokemethod(“install”,”\\ruta unc paquete msi”}

Desinstalar aplicaciones

• Igualmente que instalamos podemos invocar al método uninstall para eliminar una aplicación:

– (get-wmiobject –class wind32_product –filter “name=‘aplicación’” –computername .) .invokemethod (“uninstall”,$null)

Cambiar estado de un equipo

• Un equipo lo podremos bloquear, cerrar la sesión, apagarlo o reiniciarlo.

– Bloquearlo

• Rundll32.exe user32.dll,lockworkstation

– Cerrar la sesión

• Shutdown.exe -1• (get-wmiobject –class win32_operatingsystem –

computername .) .invokemethod(“win32shutdown”, 0)

– Apagarlo o reiniciarlo

• Tsshutdn.exe o shutdown.exe

TechNews de Informática 64

• Suscripción gratuita en technews@informatica64.com

Contactos

• Informática 64

– http://www.informatica64.com

– i64@informatica64.com

– +34 91 146 20 00

• Julián Blázquez García

– jblazquez@informatica64.com

top related