microsoft windows server 2008 powershell julián blázquez garcía [email protected]...
TRANSCRIPT
Microsoft Windows Server 2008Microsoft Windows Server 2008
PowerShellPowerShell
Julián Blázquez García
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 [email protected]
Contactos
• Informática 64
– http://www.informatica64.com
– +34 91 146 20 00
• Julián Blázquez García