código: hol-win53 microsoft windows server 2008 r2 powershell
TRANSCRIPT
Código: HOL-WIN53
Microsoft Windows Server 2008 R2
PowerShell
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• Windows Server 2008 R2• Requisitos para su instalación:– Instalar en caracteristicas Windows PowerShell
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 comandosGet-command *
►Los comandos pueden filtrarseGet-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 aliasGet-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
instruccionesGet-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-listGet-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.
Introducción
►Powershell define diferentes tipos de unidades a las que se puede tener objeto.
Unidades lógicas de disco y almacenamiento.
AliasFuncionesContenedor de certificados.
Usuario
Equipo
Introducción
Registro.Clave HKEY_Current_User
Clave HKEY_Local_Machine
EntornoVariables
Unidades►Para obtener las unidades utilizaremos el cmdlet:
Get-psdrive
►Si queremos diferenciarlos por proveedorGet-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 unidadesRemove-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
Scripting
►Scripting a través de línea de comandos
►Política de Ejecución
►Ejecutar scripts
CScriptWScriptWindows 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ónRestricted (por defecto)
PowerShell no permite la ejecución de Scripts
AllSignedÚnicamente Scripts firmados por publicadores de confianza
RemoteSignedLos firmados y los creados localmente en la máquina
UnrestrictedSe 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 C:\Scripts\Script.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see “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
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
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
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-processStop-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 serviceGet-service
►Mediante –displayname podremos buscar un servicio por el nombre para mostrar.
►Los servicios pueden iniciarse, suspenderse o reiniciarse:
Stop-serviceStart-serviceSuspend-serviceRestart-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 BIOSGet-wmiobject –class win32_bios
►Obtener datos del procesador.Get-wmiobject –class win32_processor
►Mostrar actualizaciones instaladas.Get –wmiobject –class win32_quickfixengineering
►Mostrar usuariosGet-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.
BloquearloRundll32.exe user32.dll,lockworkstation
Cerrar la sesiónShutdown.exe -1(get-wmiobject –class win32_operatingsystem –computername .) .invokemethod(“win32shutdown”, 0)
Apagarlo o reiniciarloTsshutdn.exe o shutdown.exe
Suscripción gratuita en: http://www.informatica64.com/technews.aspx
TechNews de Informática 64