PowerShell ha estado en desarrollo durante más de diez años. Microsoft continúa invirtiendo en su desarrollo y adopción. Estas inversiones han transformado la facilidad y la solidez con que los desarrolladores y administradores pueden automatizar las tareas de Windows..
PowerShell resuelve los desafíos de administración y adaptabilidad mediante la integración perfecta de .NET Framework.
PowerShell es el marco de automatización de tareas de Microsoft, que consiste en un shell de línea de comandos, un entorno de scripting integrado (ISE), un lenguaje de scripting creado en .NET Framework, una API que le permite alojar PowerShell en sus aplicaciones .NET, y es un sistema distribuido. Plataforma de automatización. PowerShell proporciona acceso completo a COM y WMI, lo que le permite realizar tareas en sistemas Windows locales y remotos.
PowerShell es una plataforma de automatización de nueva generación, ya que resuelve los desafíos de administración y adaptabilidad mediante la integración perfecta de .NET Framework. Es bueno para desarrolladores, administradores, probadores y más. Basada en .NET, la herramienta reduce los costos, al tiempo que brinda a los desarrolladores y administradores una forma sencilla y lista para la empresa de automatizar, medir y mejorar todos sus procesos..
En esta introducción, resaltaré algo de la profundidad y amplitud que PowerShell trae a la mesa. Cosas como la tubería de objetos que cambia el juego, el REPL (leer, eval, imprimir bucle), la integración de .NET y más.
Si está ejecutando Windows 7 u 8, PowerShell ya está instalado. Descarga PowerShell v3 para Windows 7 aquí. Necesita Windows 7 SP1 y la descarga también funciona para Windows 2008 R2 SP1 y Windows 2008 SP2. Si está ejecutando Vista, XP o Windows 2003, deberá conformarse con PowerShell v2 aquí.
Desde la implementación de múltiples recursos a Azure, hasta el manejo de las compilaciones de software para la integración continua, el acceso a servicios web o los puntos finales REST. PowerShell lo tiene cubierto y le brinda mucho más..
¿Qué es un cmdlet? Un cmdlet es el bloque de construcción fundamental en PowerShell y se expresa como un par verbo-sustantivo, ayudando a que sean autodescriptivos. Por ejemplo:
PS C: \> Fecha de llegada domingo 26 de mayo de 2013 8:46:16 AM
PowerShell incluye cientos de cmdlets principales y puedes escribir tus propios.
PowerShell hace que el descubrimiento sea fácil. Cuando vaya a la pantalla azul de PowerShell y no esté seguro de qué hacer, use Get-Command
.
los
Get-Command
cmdlet obtiene todos los comandos que están instalados en la computadora, incluidos los cmdlets, alias, funciones, flujos de trabajo, filtros, scripts y aplicaciones.
En esencia, Get-Command
le muestra todas las cosas que puede hacer en la sesión actual de PowerShell.
Get-Command
Soporta comodines. Digamos que quiero ver todos los cmdlets que tienen el verbo, Invocar
?
Invocar Get-Command *
Esto es lo que obtengo después de presionar entrar
.
CommandType Name ModuleName ----------- ---- ---------- Función Invoke-AsWorkflow PSWorkflowUtility Función Invoke-Background ShowUI Función Invoke-BrowserControl AutoBrowse Función Invoke-Line isepack Función Invoke -Línea PowerShellPack Función Invocar-Office365 Función Pipeworks Invoke-Pester Función Pester Invocar-WebCommand Pipeworks Cmdlet Invoke-CimMethod CimCmdlets Cmdlet Invoke-Command Microsoft -PowerShop.P. Cmdlet Invoke-Item Microsoft.PowerShell.Management Cmdlet Invoke-RestMethod Microsoft.PowerShell.Utility Cmdlet Invoke-TroubleshootingPack solución de problemasPack Cmdlet Invoke-WebRequest Microsoft.PowerShell.
¿Cuáles son los cmdlets que terminan en el sustantivo Item?
Get-Command * -Artículo
Tenga en cuenta que comienza a ver otros verbos, como Borrar, Nuevo, Eliminar y Establecer.
CommandType Name ModuleName ----------- ---- ---------- Cmdlet Clear-Item Microsoft.PowerShell.Management Cmdlet Copy-Item Microsoft.PowerShell.Management Cmdlet Get-Item Microsoft.PowerShell.Management Cmdlet Invoke-Item Microsoft.PowerShell.Management Cmdlet Move-Item Microsoft.PowerShell.Management Cmdlet New-Item Microsoft.PowerShell.Management Cmdlet Remove-Item Microsoft.PowerShell.Management Cmdlet Rename-Item Microsoft.PowerShell.Management Cmdlet Set-Item Microsoft.PowerShell.Management
A continuación, usaré algunos cmdlets para resumir lo que está disponible en mi sesión en una de mis cajas cuando inicie la consola PowerShell.
Get-Command | Grupo CommandType -NoElement | Clasificar recuento
Yo lo llamo Get-Command
, Agrupalo, y ordénalo. Aquí, puedo ver que tengo más de 1000 cmdlets para trabajar. Estoy ejecutando PowerShell v3 con módulos adicionales instalados, por lo que su millaje puede variar.
Nombre de cuenta ----- ---- 2487 Función 1184 Cmdlet 38 Alias 1 Filtro
¿De qué módulos provienen estos cmdlets? Podemos responder a esa pregunta de esta manera:
Get-Command -CommandType Cmdlet | Grupo ModuleName -NoElement | Clasificar recuento
Hay mucho que puedo lograr con PowerShell.
Nombre del conteo ----- ---- 379 ShowUI 164 Hyper-V 157 Azure 92 Microsoft.PowerShell.Utility 82 Microsoft.PowerShell.Management 78 Administración web 55 Microsoft.PowerShell.Core 22 Dism 18 International 17 PKI 16 PSScheduledJob 13 Microsoft. WSMan.Management 12 CimCmdlets 10 Microsoft.PowerShell.Security 9 TrustedPlatformModule 8 BitsTransfer 8 MsDtc 6 Pipeworks 6 Kds 5 AppLocker 5 SecureBoot Recolección de las piezas de Microsoft.PowerShell.
Consigue ayuda
hace exactamente eso, muestra ayuda para el cmdlet sobre el que debe saber más. No solo es fácil obtener ayuda, es fácil crear / incluir ayuda para los cmdlets / funciones avanzadas que desarrolla, un tema para otro artículo. Tener ayuda a su alcance es un gran ahorro de tiempo.
Obtener-Ayuda Invocar-Comando
Aquí hay una versión abreviada de la salida..
NOMBRE Get-Process SYNOPSIS Obtiene los procesos que se ejecutan en la computadora local o en una computadora remota. SYNTAX Get-Process [[-Nombre]] [-Nombre de la computadora ] [-FileVersionInfo [ ]] [-Módulo [ ]] [ ] Get-Process [-ComputerName ] [-FileVersionInfo [ ]] [-Módulo [ ]] -Carné de identidad El ] Get-Process [-ComputerName ] [-FileVersionInfo [ ]] [-Módulo [ ]] -InputObject El ] DESCRIPCIÓN El cmdlet Get-Process obtiene los procesos en una computadora local o remota ...
Más fácil aún; hay un cambio para esto en el cmdlet Get-Help que te lleva aquí.
Get-Help Get-Process -Online
¿Quieres ver ejemplos de cómo usar el cmdlet? Utilizar el -Ejemplos
cambiar. Además, puede copiar y pegar el ejemplo directamente en la consola y ejecutarlo.
Get-Help Get-Process -Ejemplos
Es así de fácil y rápido..
NOMBRE Get-Process SYNOPSIS Obtiene los procesos que se ejecutan en la computadora local o en una computadora remota. -------------------------- EJEMPLO 1 ---------------------- ---- PS C: \> Get-Process Este comando obtiene una lista de todos los procesos en ejecución que se ejecutan en la computadora local. Para obtener una definición de cada columna, consulte la sección "Notas adicionales" del tema de Ayuda de Get-Help. -------------------------- EJEMPLO 2 ---------------------- ---- PS C: \> Get-Process winword, explorer | lista de formatos *
El W3C define un "servicio web" como:
[...] un sistema de software diseñado para admitir la interacción interoperable máquina a máquina a través de una red. Tiene una interfaz descrita en un formato procesable por máquina (específicamente WSDL). Otros sistemas interactúan con el servicio web de una manera prescrita por su descripción utilizando mensajes SOAP, que generalmente se transmiten mediante HTTP con una serialización XML junto con otros estándares relacionados con la web.
PowerShell hace un trabajo rápido de los servicios web, utilizando el Nuevo-WebServiceProxy
cmdlet. Cambiar el $ zipcode
, ejecutalo y obtén la última información del clima.
$ zipCode = "96826" $ svc = New-WebServiceProxy http://wsf.cdyne.com/WeatherWS/Weather.asmx $ result = $ svc.GetCityForecastByZIP ($ zipCode) # Transforme los resultados $ result.ForecastResult | ForEach [PSCustomObject] @ City = $ result.City State = $ result.State Date = $ _. Date.ToString ("d") Descripción = $ _. Desciption DaytimeHigh = $ _. Temperatures.DaytimeHigh
Almaceno el objeto proxy en $ svc
y luego llamar al GetCityForecastByZIP
Método, capturando los resultados en $ resultado
. Recorriendo la matriz ForecastResult, transformo el registro en los datos. Tenga en cuenta que el Ciudad y Durante el día están en diferentes niveles en la jerarquía.
La técnica que estoy usando es crear pares clave / valor para la tabla hash. @
Es la sintaxis de PowerShell para una nueva tabla hash. Utilizando [PSCustomObject]
es un PowerShell acelerador, lo que me permite, por un lado, crear un objeto personalizado desde una tabla hash.
los Weather.asmx
Servicio web devuelto XML jerárquico. En un puñado de comandos de PowerShell, cambié la forma de los datos y los formateé (la Fecha) a mi gusto. Para este ejemplo, elegí dejar que PowerShell lo imprima. Una vez que tengo los datos en mi sesión de PowerShell, ahora estoy conectado al ecosistema de PowerShell y puedo canalizar fácilmente esta matriz de objetos personalizados a otros cmdlets para enviarlos a otro servicio web, generar HTML, guardarlo en un archivo, crear un CSV archivo o exportarlo a una base de datos SQL.
Ciudad Estado Fecha Descripción Día Horario Alto ---- ----- ---- ----------- ----------- Honolulu HI 22/05/2013 Duchas 76 Honolulu HI 5/23/2013 Parcialmente nublado 76 Honolulu HI 5/24/2013 Parcialmente nublado 77 Honolulu HI 5/25/2013 Parcialmente nublado 77 Honolulu HI 5/26/2013 Parcialmente nublado 77 Honolulu HI 5/27/2013 Parcialmente nublado 77 Honolulu HI 28/05/2013 Parcialmente nublado 77
Cortar y cortar formatos de texto es un punto dulce de PowerShell. Aquí, convertiré tres formatos comunes a un objeto de PowerShell. Para el CSV y JSON, usaré el correcto ConvertFrom- *
cmdlets, y para el XML, usaré el acelerador que toma XML y crea un XMLDocument.
# Use CSV $ csv = "Nombre, Age'r'nJohn, 10" | ConvertFrom-Csv $ csv Nombre Edad ---- --- Juan 10 # Use JSON $ json = "Nombre: 'Tom', Edad: 20" | ConvertFrom-Json $ json Nombre Edad ---- --- Tom 20 # Usar XML $ xml = ([xml] [/ xml] "") .data.record $ xml Nombre Edad ---- --- Harry 30 # Combina los tres $ csv, $ json, $ xml Nombre Edad ---- --- John 10 Tom 20 Harry 30 # Sume el edades $ csv, $ json, $ xml |% $ suma = 0 $ suma + = $ _. edad $ suma 60 Acosar 30
Entonces, tomamos tres formatos heterogéneos, y al final, realizamos una agregación sobre uno de los campos. Podría haber recuperado cada una de estas fuentes de datos de varios lugares, el CSV de un recurso compartido de red, el JSON para una consulta REST y el XML de un servicio web. Como dije, este es un punto dulce de PowerShell.
Usemos la API REST de búsqueda de Twitter en la línea de comandos. Construyo la URL, que puedes usar en tu navegador, y luego uso el cmdlet de PowerShell Invocar-RestMethod
. Envía una solicitud al servicio REST y determina si la respuesta es XML o JSON. Aquí estoy solicitando una respuesta JSON para, Invocar-RestMethod
convierte los resultados en una matriz de objetos de PowerShell. Los canalizo a la Seleccionar
cmdlet (un alias del verbo-sustantivo Seleccionar objeto
) Elegir solo tres campos. Piense en esto como una proyección, similar a LINQ o SQL.
$ query = "PowerShell" $ url = "http://search.twitter.com/search.json?q=$query" (Invoke-RestMethod $ url) .results | Seleccione created_at, from_user_name, texto
Es fácil. Mira un video que hice para la versión 2: "PowerShell, ShowUI y la API de Twitter". Una mini aplicación WPF de Twitter en un puñado de PowerShell.
created_at from_user_name text ---------- -------------- ---- Sat, 25 de mayo de 2013 vitor pombeiro @brunomlopes a falar sobre Powershell "Minha maneira" Sat , 25 de mayo de 2013 Jeffery Hicks ¿Sabía que el #PowerShell ISE tiene opciones de inicio? En sábado, 25 de mayo de 2013 Pat Richard @mwjcomputing Sí, siempre usé $ MyInvocation.MyCom sábado, 25 de mayo de 2013 Rob Fairman "#PowerShell Script para eliminar #Windows Event Logs" ht. Sat, 25 de mayo de 2013 #Azure usin Sat, 25 de mayo de 2013 VT Technology RT @jangwoo_park: “@ VTTechnology: Exportar múltiples Virtua Sat, 25 de mayo de 2013 Aryan Nava Uso de PowerShell para ver el sitio creado el día anterior, 25 de mayo de 2013 Aryan Nava PowerShell Consejos para SQL Server http://t.co/lVW2AY5BYZ Sat, 25 de mayo de 2013 Private Cloud Tech El viaje a la nube privada Parte 3 - Infraestructura Sat, 25 de mayo de 2013 Dr Tom Shinder El viaje a la nube privada Parte 3 - “The Infrastruc Sat, 25 de mayo de 2013 Jacob Daniels RT @tech_faq: Windows Server Manager se basa en Windows Sat, 25 de mayo de 2013 CodeCruiser 10 consejos para el servidor de SQL PowerShell Scripter http: // t.
PowerShell es un lenguaje interpretado. Por lo tanto, habrá una penalización. No es una preocupación importante, pero, a veces, necesitará la velocidad de un lenguaje compilado. PowerShell le permite compilar C # sobre la marcha en la memoria en su sesión de PowerShell, usando el -TypeDefinition
parámetro en el Add-Type
cmdlet. Nota la aquí cadena
identificado por el @ "" @
. Son super útiles al citar texto. Te animo a explorar más con Add-Type
y las reglas de cotización de PowerShell.
Add-Type -TypeDefinition @ "public class TestInline public long Fibonacci (long n) long a = 0; long b = 1; for (long idx = 0; idx < n; idx+=1) long temp = a; a = b; b = temp + b; return a; "@ $obj = New-Object TestInline 1… 10 | ForEach $obj.Fibonacci($_)
Ahora, digamos que no le di el código fuente, solo la DLL compilada. No hay problema: Add-Type
tiene un -Camino
parámetro.
Add-Type -Path. \ FibLib.dll $ obj = New-Object TestInline 1… 10 | ForEach $ obj.Fibonacci ($ _)
Presta especial atención a esto. Utilizando Add-Type
De esta manera, es así como envuelve fácilmente cualquier DLL .NET que provenga de cualquiera, si aún no ha proporcionado una interfaz de PowerShell. Esto es cierto ya sea que la DLL sea de Microsoft, DELL, Citrix u otro desarrollador.
Así que eso lo hace por ahora. ¿Te gustaría ver más contenido específico de Powershell en Nettuts +? Háganos saber a continuación!